問題タブ [sta]

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.

0 投票する
1 に答える
513 参照

.net - STA スレッド モード スレッドも winform UI スレッドをブロックしますか?

バック グラウンド スレッドから STA COM オブジェクトを使用しています。COM オブジェクトのモードが STA であるため、STA スレッド モードの新しいスレッドから呼び出すと、COM オブジェクトのメソッドの 1 つがブロックされ、UI スレッドのようです。もブロックされます。この UI のブロックを回避できますか?

0 投票する
2 に答える
1464 参照

c# - 外部プロセスからのC#でのスレッドの問題

私はこの単純なコードを持っています:

残念ながら、このコードを(サードパーティのプロセスから)実行すると、スレッドは実際には実行されません。プロセスエクスプローラーとVSデバッガーのどちらでも、スレッドが作成され、その状態が「実行中」であることがわかります。

メインスレッドのアパートメントはSTAであり、内部スレッドでSTAとMTAの両方を試しました。

Run()最後にメソッドに追加するとinvokerThread.Join();、スレッドは実行されます。しかし、それでも実際には役に立ちません。

私は何が欠けていますか?

編集:ここにコードホスティングに関するいくつかの詳細情報があります-

Run()メソッドは、実行可能アセンブリも管理されているプロセスからCOM相互運用機能を介して呼び出されます(COM相互運用機能が使用される理由は、システム内の他のすべてのコンポーネントがネイティブであるためです)。

このメソッドRunOnBackground()には、トレース後にさらにいくつかのコードが含まれ、通常、別のプロセスの開始と終了の待機を含め、その実行は10〜20秒続きます。また、トレースにデバッグ情報を書き込む他の領域がコードにあります。コードのデバッグ中はRun()、通常どおりに実行され、invokerThread.Start();invokerThreadの状態が「実行中」になった後(RunOnBackground()メソッド内のブレークポイントは停止しません)。

invokerThread.Join()メソッドの最後に追加するとRun()、デバッガーは。のRunOnBackground() に移動しJoin()ます。

0 投票する
1 に答える
101 参照

asp.net - STA スレッドによってデリゲートを呼び出すための一般的な「FuncSTA」はありますか?

ASP.NETアプリケーションがあり、そのCOM中でいくつかのコンポーネントを使用する必要があります。

FuncまたはAction、新しいSTAスレッドを作成し、そのスレッドまたはこのようなものでデリゲートを実行するラッパークラスが必要です。そのようなクラスやライブラリ、またはサンプルコードを知っていますか?

0 投票する
4 に答える
5380 参照

c# - 1 つのプロセス内で共存できる 'STA' スレッドの数はいくつですか?

一部のコンポーネントSTAを使用するには、ASP.NET アプリケーション内で複数のスレッドが必要です。COM

各プロセス内のどこかを読みましたが、STA存在できるスレッドは1つだけです。サンプル プロジェクトをコーディングし、多くのスレッドを作成し、それらのアパートメントの状態を に設定するSTAと、COM例外なくオブジェクトを操作できます。

プロセス内に多くのSTAスレッドを持つことは可能ですか?

0 投票する
1 に答える
4794 参照

c# - `STA`スレッドでデリゲートを実行するようにスレッドプールに指示するにはどうすればよいですか?

プロジェクトCOM内のオブジェクトを操作するためのスレッドプールが必要です。ASP.NET

0 投票する
2 に答える
4763 参照

c# - MTAスレッドと比較したSTAスレッドの制限は何ですか?

このようにスレッドSTAを作成すると、属性Thread.SetApartmentState(STA);でマークされたコードを実行できなくなります。[MTAThread]

[STAThread]Windowsやコンソールアプリケーションで見たことがありますが、属性を持つコードを見たことがなく[MTAThread]、どの.NETライブラリがこの属性を使用しているかわかりません。

私の質問は、MTAアパートメント状態のスレッド(自然な.NETスレッド)と比較して、アパートメント状態がSTAに設定されているスレッドの制限は何ですか?

0 投票する
4 に答える
11891 参照

c# - WinForms アプリケーションがデフォルトで STAThread になっているのはなぜですか?

Visual Studio で空のWinFormsSTAThreadアプリケーションを作成すると、テンプレートのメイン アプリケーション クラスに属性が含まれます。

私はそれについていくつかのドキュメントを読んでいますが、それをまったく理解しているかどうかはわかりません.

本当に私はそれについていくつか質問があります:

  1. なぜこの属性が追加されたのですか?
  2. どういう意味ですか?
  3. この属性を削除するとどうなりますか?
0 投票する
5 に答える
34873 参照

c# - バックグラウンド ワーカー スレッドをシングル スレッド アパートメントに設定するにはどうすればよいですか?

自動テスト実行アプリケーションを作成しています。アプリケーションのこの部分では、ポーリング サーバーで作業しています。Web サーバーを常にポーリングして、新しい自動テストをいつ実行する必要があるかを判断します (GUI アプリケーションの夜間の自動実行用)。

ポーリング サーバーが要求を確認すると、必要なすべての情報をダウンロードし、バックグラウンド ワーカーでテスト実行を実行します。Clipboard.Clear()問題は、テスト実行の一部に、バックグラウンド ワーカー スレッドで発生するOLE、COM、およびその他の呼び出し (たとえば、 ) があることです。これらの呼び出しのいずれかが発生すると、次の例外が発生します。

OLE 呼び出しを行う前に、現在のスレッドをシングル スレッド アパートメント (STA) モードに設定する必要があります。Main 関数に STAThreadAttribute がマークされていることを確認します。

バックグラウンドワーカースレッドをシングルスレッドアパートメントとしてマークするにはどうすればよいですか? 私の Program.cs の Main 呼び出しには、明らかにその属性が既にあります。

0 投票する
1 に答える
779 参照

c++-cli - STA、MTA 競合の警告 重要ですか?

最近、ネイティブ C++ ライブラリの C++/CLI ラッパーを書き始めました。このコンパイル警告が表示されるようになりました

"警告 LNK4249: ディレクティブ '/CLRTHREADATTRIBUTE:STA' はコマンド ラインと競合します。無視されます"

私の c++/cli ラッパーは、リンカのコマンド ライン引数で MTA 用に設定されていますが、STA ディレクティブを指定しようとしているファイルまたはプロジェクトがわかりません。

.NET が強制的にライブラリをマルチスレッド化することについて心配するほど、十分な読み物をしました。これは主にアプリケーションでの COM の使用に影響することを読みましたが、DLL が COM を使用しているかどうか、またはどこで COM を使用しているかはよくわかりません。相互運用サービスを使用して文字列データをマーシャリングし、'msclr\auto_gcroot.h' を使用してアンマネージド クラスからマネージド クラスをポイントしています。ラップされているネイティブ C++ ライブラリに、次のヘッダーを含めます。

将来のつらい経験を避けるのに役立つアドバイスはありますか、それとも心配する必要はありませんか?

0 投票する
3 に答える
3785 参照

.net - ASPXページのAspcompat

私のaspxページでは、STAを使用するCOMコンポーネントを呼び出します。したがって、aspcompat = trueパラメーターを使用しますが、ロジックを理解したいと思います。それは正確に何をしますか?私の知る限り、STAでは、1つのスレッドによってのみ呼び出されると想定されています。だから私は自分でスレッドセーフを提供する必要があります。

そうだとすれば、aspcompatパラメーターはどこでスレッドセーフを提供しますか?ページ全体、またはSTAコンポーネントにアクセスするポイントだけですか?