問題タブ [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 投票する
2 に答える
6189 参照

c# - 現在のスレッドのアパートメント状態を確認するには?

STA アパートメント状態で実行する必要がある関数があります。STAとして実行されているかどうかを確認したくありません。そうでない場合は、STAで実行される新しいスレッドを生成します。

現在のスレッドが実行されているアパートメントの状態を確認するにはどうすればよいですか?

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

.net - WPF UIスレッドを使用すると、常にSTAアパートメントモードが保証されますよね?

私のWPFアプリケーションでは、サーバーと非同期で通信します。したがって、コールバックはUIスレッドで実行されません。そこで、いくつかのWPF処理(InkPresenterオブジェクトの作成)を行う必要があるため、UIスレッドで実行する必要があります。実際の要件は、STAアパートメントモードのスレッドで実行することです。STAモードで新しいスレッドを作成しようとしましたが、「別のスレッドが所有している」ため、UIスレッドがInkPresenterにアクセスできませんでした。

コールバックで実行したいのは、ディスパッチャーを使用して、STAを必要とする関数を呼び出すことです。これは正しいアプローチのように聞こえますか?私は今これをします、しかしそれはまだ失敗します。コールバック関数で次の関数をトリガーします。これにより、アドレス指定された関数がUIスレッドで実行されるようになります。

サンプルからわかるように、CheckAccess()を使用して、UIスレッドでまだ実行されていない場合にのみ関数を呼び出すようにします。私のコールバックがこの関数を呼び出すとき、CheckAccess()は常にtrueですが、Dispatcher.CurrentDispatcher.Thread.ApartmentStateMTAです。なんで?CheckAccess()を削除して常にInvokeを実行しようとしましたが、ApartmentStateはMTAのままであり、InkPresenterの作成は失敗します。

ここで私が間違っていることを誰かに説明してもらえますか?間違ったディスパッチャーか何かを持っていますか?これは、UIスレッドで何かが実行されるようにするための正しいアプローチですか?

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

c# - STAThread モードで単体テストを実行するには?

クリップボード (WindowsForms) を使用するアプリをテストしたいのですが、単体テストでもクリップボードが必要です。それを使用するには、STA モードで実行する必要がありますが、NUnitTestFixtureには main メソッドがないため、どこにどのようにアノテーションを付けるかわかりません。

0 投票する
5 に答える
15027 参照

c# - Process.Start がブロックされています

Process.Start を呼び出していますが、現在のスレッドがブロックされます。

プロセスが閉じられても、コードはもう応答しません。

しかし、Process.Start は本当にブロックするはずなのでしょうか? どうしたの?

(プロセスは正しく開始されます)


コンソール出力は次のとおりです。

--- ENTER を押してサービスを停止します --- プロセスを開始します。


それを見つけた:

[スタスレッド]

Process.Start をブロックします。STAThread と Multithreadingを読みましたが、その概念を Process.Start の動作と関連付けることができません。

私の知る限り、Windows.FormにはSTAThreadが必要です。Windows.Form を使用している場合、この問題を回避するにはどうすればよいですか?


地獄のニュース:

アプリケーションを再構築すると、アプリケーションを初めて実行したときは正しく動作しますが、デバッグを停止して iy を再起動すると、問題が発生します。

アプリケーションがデバッガなしで実行された場合、問題は発生しません。

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

fitnesse - Slim (FitNesse) で STA が認識されない

自動テストの実行に使用するコマンドをユーザーが記述できるようにする、Slim 用のカスタム テーブル クラスを作成しました。STA スレッドで実行する必要がある特定の呼び出しに依存するコマンドを除いて、すべてのコマンドが機能するようになりました。STA を suiteConfig ファイルに追加することで、Fit でこの問題を解決できました。ただし、スリム構成に追加しても機能しないようです。これは私が持っているコードです:

!define TEST_SYSTEM {slim}
!define COMMAND_PATTERN {%m -c C:\..\Slim\slim.config.xml}
!define TEST_RUNNER {C:\..\Slim\Runner.exe}

<suiteConfig>
<ApplicationUnderTest>
<AddAssembly>C:\..\Slim\fit.dll</AddAssembly>
<AddAssembly>C:\..\Slim\fitSharp.dll</AddAssembly>
</ApplicationUnderTest>
<Settings>
<ApartmentState>STA</ApartmentState>
<Runner>fitSharp.Slim.Service.Runner</Runner>
</Settings>
<FileExclusions>
<Add>^\.svn$</Add>
</FileExclusions>
</suiteConfig>

STA モードの効果が Fit と Slim で異なる理由は何かあるでしょうか? コマンド パターンまたは構成ファイルで変更する必要があるものはありますか? どんな助けでも大歓迎です!

サム

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

wcf - IIS (7 以降) でホストされている WCF サービスで使用される場合、STA COM コンポーネントはどのように処理されますか?

私が理解していることから、 STAを使用しているとマークされた COM コンポーネントがMTAスレッドから使​​用される場合、呼び出しは STA スレッドにマーシャリングされ、その専用スレッドから実行されるはずです。Windows クライアント アプリケーションの場合、これは UI スレッドで実行され (STA としてマークされている場合)、COM コンポーネントから私へのコールバックは、非表示のウィンドウに送信されて処理される Windows メッセージによって処理されることを意味します。 Windows メッセージ ループ。

IIS でホストされている WCF サービスで STA COM コンポーネントを使用するとどうなりますか? ワーカー プロセスの STA スレッドで Windows メッセージ ループは発生しますか? 独自のメッセージ ループを使用して独自の STA スレッドを起動できますか?

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

.net - .NETのどのブロッキングスレッド操作がブロックされたときにCOMメッセージを処理しますか?

STA COMコンポーネントをホストするための新しいSTAスレッドを作成する場合、COMに関連するWindowsメッセージを送信するのはそのスレッドの責任です。私が収集できたものから、lock(Monitor.Enter)などの特定の組み込みの.NETスレッドプリミティブは、オブジェクトが別のスレッドによって解放されるのを待っている間、これを行います。私が見た.NETポンプCOMメッセージを作成する別の方法は、.Join()を使用することです。

この動作を備えた組み込みのスレッドプリミティブの完全なリストはどこにありますか?WaitHandleを待つことはこれをサポートしますか?WaitAny()、または.NET 4の新しい同時コレクションについてはどうですか?特定の方法のドキュメントでこれを見つけることができません。

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

wpf - WPF アプリケーションのブルー STA スレッド例外から

「呼び出し元のスレッドは STA でなければなりません。多くの UI コンポーネントがこれを必要とするためです。」という例外が発生します。例外を与えているコンストラクターが STA スレッド内から呼び出されているため、これはばかげています!

私は本当に私のロープの終わりにいます。他の誰かがこの問題に遭遇しましたか?

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

multithreading - ElementHostは、「多くのUIコンポーネントがこれを必要とするため、呼び出し元のスレッドはSTAである必要があります」と表示します。

ElementHostをWindowsフォームに追加しました(フォームには他にもいくつかのc#コードがあります)。次に、「多くのUIコンポーネントがこれを必要とするため、呼び出し元のスレッドはSTAである必要があります」というエラーが表示されました。スレッドをSTAに変更しましたが、他のものをブロックしました...他のコードに触れることなくelementhostを機能させる方法はありますか?

これが私がスレッドを変更する方法のコードです:

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

c# - ログリーダーを理解しようとしている

私はいくつかのコードを理解しようとしています。ログデータを出力する小さなプログラムです。これは、DataTable によって埋められる DataGridView を含むフォームを作成することによって行われます。フォーム クラスには、リフレッシュ機能 (RefreshPresentation) もあります。BusinessLogic クラスは、DataTable を更新し、フォームで更新機能を呼び出すという実際の作業を行います。だから私は機能をかなり理解していますが、プログラムがそのように構成されている理由はわかりません。

  1. businessLogic.DoWork が通常のメソッド呼び出しではなく、スレッドとして実行されるのはなぜですか?
  2. RefreshPresentation 機能について誰か説明してもらえますか? (BeginInvoke とデリゲート)
  3. MainForm をパラメーターとして BusinessLogic に渡すことは良い考え/実践ですか?

これは、アプリケーションのメイン エントリ ポイントです。

これはフォームの関連部分です。

これがビジネスロジックです。