シングルスレッドのCOMコンポーネントには、STAスレッドで作成するという厳しい要件があります。これは、Main()メソッドの[STAThread]属性を使用し、メッセージループをポンピングすることによって作成します。Application.Run()によって作成されたものなど。
これで、ワーカースレッドまたはタイマーコールバックからそのようなコンポーネントを呼び出すことができます。COMは、コンポーネントのシングルスレッド要件が満たされていることを確認し、STAスレッドを呼び出すマーシャリングを行います。達成しようとしていたことを打ち負かすと、コンポーネントへのすべての呼び出しは1つのスレッドでのみ実行されます。あなたはそれを速くではなく遅くするでしょう。通話のマーシャリングは高速ではありません。
ここには秘密のソースはありません。スレッド化をサポートしていないことを明示的に示したコンポーネントを、スレッド化されたコンポーネントに魔法のように変えることはできません。また、COMコンポーネントの大部分、さらに言えば.NETコンポーネントがスレッド化をサポートしていないことも珍しくありません。COMコンポーネントと.NETコンポーネントの違いは、COMがそれに対して何かを行うことです。.NETコンポーネントは通常、診断なしで、ある種のスレッドレースで誤動作します。