none
スレッドの強制STA設定はできますか? RRS feed

  • 質問

  • お世話になります。

    VS2010 C#でWindowsフォームアプリを開発しています。

    クリップボードやD&Dを使っているフォームDLLをスレッドから呼び出すとCOMの例外が発生します。

    スレッド自体をSTAに設定することで回避?できますが、

    構成ファイル等でスレッドの既定を強制的にSTAモードに出来ないのでしょうか?

    宜しくお願いします。

    2016年1月26日 10:37

回答

  • Mainメソッドにのみ使えるSTAThread属性を除いては存在しません。

    • 回答としてマーク mocha07 2016年1月28日 0:55
    2016年1月26日 10:51
  • MTAスレッドと異なりSTAスレッドはメッセージループを回す必要があります。単にモードを指定すれば済むものではありません。ですので、原理上、強制的に変更することはできません。

    このことはあまり知られていないのでMSDNのSingle-Threaded Apartmentsから引用します。

    Each single-threaded apartment must have a message loop to handle calls from other processes and apartments within the same process. Single-threaded apartments without objects (client only) also need a message loop to dispatch the broadcast messages that some applications use.
    メッセージループがなくても動くこともありますが…動作保証されたものではありません。
    • 編集済み 佐祐理 2016年1月27日 1:52
    • 回答としてマーク mocha07 2016年1月28日 0:55
    2016年1月26日 13:08

すべての返信

  • Mainメソッドにのみ使えるSTAThread属性を除いては存在しません。

    • 回答としてマーク mocha07 2016年1月28日 0:55
    2016年1月26日 10:51
  • MTAスレッドと異なりSTAスレッドはメッセージループを回す必要があります。単にモードを指定すれば済むものではありません。ですので、原理上、強制的に変更することはできません。

    このことはあまり知られていないのでMSDNのSingle-Threaded Apartmentsから引用します。

    Each single-threaded apartment must have a message loop to handle calls from other processes and apartments within the same process. Single-threaded apartments without objects (client only) also need a message loop to dispatch the broadcast messages that some applications use.
    メッセージループがなくても動くこともありますが…動作保証されたものではありません。
    • 編集済み 佐祐理 2016年1月27日 1:52
    • 回答としてマーク mocha07 2016年1月28日 0:55
    2016年1月26日 13:08
  • Hongliangさま、佐祐理さま ご連絡有難うございます。
    簡単にできればと思ったのですが。。。
    この度は誠にありがとうございましたm(. .)m
    2016年1月28日 0:54