問題タブ [apartment-state]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Winforms:1つのCOMオブジェクトにはSTAThreadが必要で、もう1つのCOMオブジェクトにはMTAThreadが必要です。どうすれば使用できますか?
2つのCOMコンポーネントを使用してWinformsアプリケーションを構築しようとしています。ただし、コンポーネントの1つは使用時にのみ機能し、もう1つは。[MTAThread]
でのみ機能し[STAThread]
ます。
推奨される解決策は何でしょうか?
c# - 現在のスレッドのアパートメント状態を確認するには?
STA アパートメント状態で実行する必要がある関数があります。STAとして実行されているかどうかを確認したくありません。そうでない場合は、STAで実行される新しいスレッドを生成します。
現在のスレッドが実行されているアパートメントの状態を確認するにはどうすればよいですか?
.net - NUnitGUIランナーとアパートの状態
NUnit GUIランナーでアパートの状態をどのように設定しますか?WatiNを使用して単一のNUnitテストを実行しようとすると、次のメッセージが表示されます。
MyNamespace.LoginTests.CanLogin:
System.Threading.ThreadStateException:Internet Explorerを自動化するには、CurrentThreadのApartmentStateをApartmentState.STAに設定する必要があります。
c# - 1 つのプロセス内で共存できる 'STA' スレッドの数はいくつですか?
一部のコンポーネントSTA
を使用するには、ASP.NET アプリケーション内で複数のスレッドが必要です。COM
各プロセス内のどこかを読みましたが、STA
存在できるスレッドは1つだけです。サンプル プロジェクトをコーディングし、多くのスレッドを作成し、それらのアパートメントの状態を に設定するSTA
と、COM
例外なくオブジェクトを操作できます。
プロセス内に多くのSTA
スレッドを持つことは可能ですか?
.net - デリゲートをBeginInvokeするスレッドの性質を変更できますか?
BeginSomething()
私はとEndSomething()
のペアを持つインターフェースを実装しています、そして私の実装はメソッドにありますExecute()
そこで、を作成し、 BeginSomethingとEndSomethingAction action = Execute
を呼び出します。ただし、私のExecuteメソッドは、アパートメントの状態がSTA(シングルスレッドアパートメント)であるスレッドによって呼び出される必要があります。通常、これはを呼び出すことによって行われますが、この場合、どのスレッドが自分のメソッドを呼び出すのかわかりません。action.BeginInvoke
action.EndInvoke
Thread.SetApartmentState
呼び出し元のスレッドをSTAにするにはどうすればよいですか?
activex - スレッドがシングルスレッド アパートメントにあるため、ActiveX コントロールをインスタンス化できません。PC をスリープから復帰させた後に発生する
私は、通話の発着信時にブラウザー ウィンドウ (ExtendedWebBrowser) を開く VOIP クライアント (ウィンドウのフォーム) に取り組んでいます。通常は正常に動作しますが、コンピューターがスリープ モードになってから復帰すると、プログラムは次のエラーでクラッシュします。
コードで開始されたスレッドを設定しようとしましたthread.SetApartmentState(ApartmentState.STA)
が、同じ結果が得られます。[STAThread]
また、関数の前に持っていmain()
ます。今、コンピューターがスリープ状態になったときにスレッドが正しく終了しないことにもっと関係があるのではないかと思っていますが、よくわかりません。私のバックグラウンドは C++ と DirectX です。これは私が取り組んだ最初の Windows フォームなので、助けていただければ幸いです。
フォローアップ:プログラムを再開した後、メイン スレッドではなくワーカー スレッドで開始されていることを発見した後、この問題を解決することができました。詳細については、こちらを参照してください:スリープ (サスペンド) および Windows フォームの再開は、メイン スレッドではなくワーカー スレッドでプログラムを開始します。
c# - インプロセス COM サーバーへの LoaderOptimization の適用
.NET インプロセス COM サーバーに複数の AppDomains を作成する必要があります (これは Windows エクスプローラーの名前空間拡張です)。
私のテスト コンソール アプリケーションでは、40 秒で 10 個のドメイン + WPF ウィンドウを作成できましたが、これは受け入れられません。これを追加LoaderOptimization.MultiDomainHost
すると、これが最大 2 ~ 5 秒短縮されますが、これは問題ありません。
ただし、Main
COM サーバーにはメソッドがなく、LoaderOptimization を指定してもAppDomainSetup
2 つ以上の追加ドメインのロードにのみ影響します (つまり、最初の追加の AppDomain は 3 ~ 4 秒で開始し、その他は 0.1 ~ 0.3 秒で開始します)。
では、インプロセス COM サーバーを指定できますか? はいの場合、どのように指定できますか?LoaderOptimization
c# - 多くの UI コンポーネントがこの WPF を必要とするため、呼び出しスレッドは STA でなければなりません。
WPF Toolkitが提供する MessageBox を使用しています。そして、私はエラーが発生します
多くの UI コンポーネントがこれを必要とするため、呼び出しスレッドは STA でなければなりません。
この場合、ApartmentState を設定するにはどうすればよいですか
編集:WPF Toolkit の MessageBox コントロールを使用してモードレス MessageBox を表示しようとしています。これまでのところ、私が持っているコードは次のとおりです。
nunit - TeamCity SpecFlow NUnit Watin および ApartmentState STA
新しい teamcity サーバーで specflow ワチン テストを実行しようとしています。問題は、組み込みの nunit ランナーを取得して、appartmentstate STA でテストを実行できないことです。
以前にこの構成を使用しましたが、これは他のテストランナーと連携します。
しかし、TeamCity NUnit テスト ランナーは、この構成を認識していないようです。他の構成の健全性テストが実施されているため、テストランナーが少なくともテスト プロジェクトの構成を読み取ることがわかっています。
次のように RequiresSTA 属性を使用する代替手段があります。
しかし、NUnit テストは SpecFlow によって生成されるため、これらの属性の設定方法を制御することはできません。
このセットアップを機能させるにはどうすればよいですか?
nunit - SpecFlow NUnit RequiresSTA 属性
SpecFlow で RequiresSTA 属性を使用して NUnit テストを生成する必要があります。どうやってやるの?