問題タブ [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.
wpf - WPF で Main メソッドに STAThread 属性を適用する必要があるのはなぜですか?
私はWPFを初めて使用します。私が読んだすべてのチュートリアルでは[System.STAThread]
、メソッドに属性が適用されているかMain
、読者にそれを行うように指示しています。
この属性は本当に「必須」ですか? もしそうなら、なぜですか?
c# - Thread.Join が COM メッセージを通過させないのはなぜですか?
次のことを行うマルチスレッドコードを実行しています。
- STA スレッドで、「ワーカー」スレッドを作成して実行します。
- 次に、STA スレッドは、ワーカー スレッドが終了するのを待ちます。
- ワーカー スレッドは、プロキシ上のメソッドを STA スレッド上の STA COM オブジェクトに呼び出し、終了します。
ステップ 2 ではThread.Join()
、ワーカー スレッドが終了するのを待つために使用しています。
のドキュメントには、標準の COM および SendMessage ポンピングを実行し続けながら、スレッドが終了するまで呼び出し元のスレッドをブロックするとThread.Join()
記載されています。
ただし、何が起こるかというと、ワーカー スレッドは COM 呼び出しで「永久に」ブロックします。STA スレッドは COM 呼び出しを処理しませんが、ワーカー スレッドで Thread.Join() を呼び出すとブロックされます。
Thread.Join でブロックされている間、STA スレッドが COM 呼び出しを処理できることを期待していました。
ここで何が起こっているのか説明できる人はいますか?
Thread.Join への呼び出しのネイティブ コールスタックは次のとおりです (ネイティブ コード デバッグ モードで VS を実行したため、WinDbg を使用していないことが原因である可能性があります)。
記事に示されている、Thread.Join を呼び出す STA スレッドのコール スタックを次に示します。
この記事の MTA スレッドのコールスタックは次のとおりです。
c# - WinForms アプリのイベントに応答するまで、メイン フォームのインスタンス化を遅らせるにはどうすればよいですか?
背景: 以下のコードで次の例外が発生します。
ThreadStateException : 現在のスレッドがシングルスレッド アパートメントにないため、ActiveX コントロール '8856f961-340a-11d0-a96b-00c04fd705a2' をインスタンス化できません。
Main() メソッドは [STAThread] 属性でマークされています。アプリは、ウィンドウなしで起動し、サード パーティのデータ コンテキスト共有ライブラリからのイベントをリッスンすることになっています。イベントハンドラーがトリガーされたときに、フォームがまだ作成されていない場合は、フォームを作成して表示したいと思います。フォームには、単に Web ブラウザー コントロールが含まれています。
それで、私の質問は、イベント ハンドラーがトリガーされるまで、アプリケーションのメイン フォーム (Web ブラウザー コントロールを含む) のインスタンス化をどのように遅らせるかということです。
この例では、最初からフォームを ApplicationContext コンストラクターに渡して作成し、それを非表示にすることができると思いますが、なぜこれが機能しないのか非常に興味があります。
...
.net - シングルスレッドアパートメント-ActiveXコントロールをインスタンス化できません
HTMLページで適用されたCSSスタイルに関する情報を取得する必要があります。AxWebBrowserを使用して、IHTMLDOMNodeを繰り返しました。必要なすべてのデータを取得して、コードをアプリケーションに移動することができます。問題は、この部分がバックグラウンドワーカー内で実行されており、コントロールをインスタンス化しようとしたときに例外が発生したことです。
このオプションまたはAxWebBrowser以外のオプションを解決する方法はありますか?
c# - シングルスレッドのアパートメントで実行する Quartz.net ジョブを作成する方法は?
私は単にこれを試しました:
ただし、InvalidOperationException が生成されます。アイデア?
multithreading - シングルスレッドアパートのワークフロー4.0?
現在、WF 4.0をよく調べていますが、STAスレッドでワークフローを実行する方法を理解するのに苦労しています。ワークフローでXPSドキュメントを作成するための要件があります。つまり、UI要素(FixedPage)を作成する必要があります。つまり、ワークフローを実行するスレッドはSTAである必要があります。
3.0では、ManualWorkflowSchedulerServiceを使用していくつかの魔法を実行して(コードのこの部分を管理しなかったため、ここでは詳細を説明しません)、ワークフローをSTAスレッドで実行できます。しかし、現在4.0は大きく異なります。ベータ2でさえベータ1とは異なります...
4.0ワークフローをSTAスレッドで実行する方法を知っている人はいますか?
WorkflowInvokerは、永続性を必要としない短期間のワークフロー専用であるため、使用できません。
wcf - Duplex WCF + COM オブジェクトの静的コレクション
元のソースがない特定の COM オブジェクトの機能を公開する WCF サービスを構築しようとしています。コールバック (IAgent) を介して配信される特定の各インスタンスに関連付けられたイベントがあるため、各クライアントが独自のインスタンスを持つように、双方向バインディングを使用しています。最初のアクションの後、サービスが 2 番目のアクションのロックでブロックされるため、デッドロックか何かがあるようです。これらのカスタム STA 属性と操作の動作を実装しようとしました ( http://devlicio.us/blogs/scott_seely/archive/2009/07/17/calling-an-sta-com-object-from-a-wcf-operation. aspx ) しかし、私の OperationContext.Current は常に null です。どんなアドバイスでも大歓迎です。
サービス
コレクション:
最初のアクション:
2 番目のアクション:
.net - .NETWindowsサービスはSTAThreadを使用する必要があります
一部のCOMコンポーネントを呼び出すWindowsサービスを作成したので、[STAThread]をMain関数にタグ付けしました。ただし、タイマーが起動すると、MTAが報告され、COM呼び出しは失敗します。どうすればこれを修正できますか?
c# - STAスレッドで何かを実行する方法は?
私のWPFアプリケーションでは、(サーバーとの)非同期通信を行います。コールバック関数では、サーバーからの結果からInkPresenterオブジェクトを作成することになります。これには、実行中のスレッドがSTAである必要がありますが、現在はそうではないようです。したがって、次の例外が発生します。
アセンブリで定義された「InkPresenter」のインスタンスを作成できません[..]多くのUIコンポーネントがこれを必要とするため、呼び出し元のスレッドはSTAである必要があります。
現在、私の非同期関数呼び出しは次のようになっています。
InkPresenterの作成を行うコールバックをSTAにするにはどうすればよいですか?または、新しいSTAスレッドでXamlReader解析を呼び出します。