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

c# - 多くのUIコンポーネントはWPFでこのエラーを必要とするため、呼び出し元のスレッドはSTAである必要があります。form.show()

最初に、サイトで同様の質問に対するいくつかの回答を読みましたが、正直なところ、それらは少し混乱していると思います(回答ではなく経験が不足しているためです!)。FileSystemWatcher()クラスを使用して、作成/変更されているファイルのフォルダーを監視しています。イベントが発生したら、プロジェクトに別のフォームをロードします。フォームをロードする代わりに、新しいフォームのコンストラクターが実行しようとするとエラーが発生します。私は1つのスレッドのみを使用しています-別のスレッドでフォームをロードしようとはしていません。私のコードは次のとおりです

よろしくお願いします。よろしくお願いします。

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

c# - 親とは異なるスレッドに属する DependencyObject は使用できません Freezable - プリズム

WPF アプリケーションの開発中に問題が発生しました。アプリケーションは Prism に基づいています。アプリケーションはプリズム ブートストラップを使用して起動し、ウィンドウをロードする前に、アプリは別のスレッド (STA) でモーダル ダイアログを開き、一連のもの (サービスなど) がロードされます。ダイアログはその間開いており、アプリケーションの起動プロセスの進行状況をユーザーに通知します (イベント アグリゲーターを使用して更新を渡します)。読み込みが完了すると、ブートストラップはダイアログを閉じ、メイン アプリケーション ウィンドウを開きます。 ここまでは順調ですね... その後、アプリケーションを閉じると、同じことが起こっています。メイン ウィンドウが閉じられ、ダイアログ ボックスが (再び新しい STA スレッドで) 開かれ、通知が許可されます。ただし、ShowDialog 呼び出し (新しい STA スレッド内で発生) をヒットすると、例外が発生します: 「親の Freezable とは異なるスレッドに属する DependencyObject は使用できません」。長時間のデバッグの後、例外の原因はウィンドウの背景であることがわかりました。これは、アプリケーションレベルでマージされた辞書から取得されたブラシ/画像です (wpf UI スレッドでインスタンス化されます)。ResouceDictionary なしで画像を読み込む場合 - すべてうまくいきます。


要約: 例外は、resourceDictionary を使用している場合にのみ、新しい STA スレッドへの 2 回目の呼び出しでのみ観察されます。これは、DialogBox をロードし、ShowDialog を呼び出したときに正確に例外を発生させます。ダイアログが 1 つしかない場合 (たとえば、ブート時とシャットダウン プロセスでのダイアログのみ)、例外は発生しません。


私の質問は次のとおりです。その理由は何ですか?この場合、この例外は正確にはどういう意味ですか? (一般に、他のスレッドから何らかの種類の UI スレッドの更新があることは理解していますが、なぜこれがダイヤルゴ + スレッドの 2 番目のインスタンスでのみ発生するのかわかりません)。

ありがとう :)

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

c# - COM/STA スレッドから WPF UI スレッドへの進行状況の報告

COM と Acrobat SDK を使用して PDF を印刷するアプリケーションに取り組んでいます。アプリは C#、WPF で記述されており、別のスレッドで印刷を正しく実行する方法を見つけようとしています。BackgroundWorker がスレッド プールを使用しているため、STA に設定できないことがわかりました。STA スレッドの作成方法は知っていますが、STA スレッドから進捗状況を報告する方法がわかりません。

このように作成された STA スレッドで進行状況を WPF ViewModel に報告するにはどうすればよいですか?

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

c# - SetApartmentStateおよび[STAThread]

Watinのソースコードには、次のコードがあります。

作成されたスレッドにはアパートメントの状態が設定されているのに、なぜ[STAThread]属性がメソッドに追加されるのですか?特定のコードには興味がありませんが、STAThread属性が必要かどうか疑問に思っています。

ノート:

  • このメソッドGoToNoWaitInternalは他の場所では使用されていません。
  • 全体のwatinプロジェクトは、WebBrowserオブジェクト(一般的にはInternet Explorerウィンドウ)の操作に関するものです。したがって、COMオブジェクトを操作しています。
0 投票する
1 に答える
406 参照

c# - BackgroundWorkerはSTAThreadに参加(リンク、アクセス、呼び出し、なる)できますか

私はSTAThreadが正確に何をするのか(何であるか)をよく知らないので、私の質問が適切に述べられているかどうかさえわかりません。

Excelの範囲の内容をクリップボードにコピーするBackgroundWorkerスレッドで実行されているプロセスがあります(Excel.Range.Copy())。コピー後、クリップボードの内容にアクセスしてテキストファイルに書き込むことができる必要がありますが、BackgroundWorkerから直接クリップボードにアクセスできないようです(BackgroundWorkerから使用Clipboard.GetText()してそのテキストをテキストファイルに書き込もうとすると、別のテキストファイルでCtrl-Vを手動で実行し、C#プロセスによってExcel範囲からコピーされたばかりのコンテンツを貼り付けることができますが、テキストは渡されません。

また、プロセスのステータスを示すProgressBarの使用を容易にするために、このプロセスをBackgroundWorkerで実行していることにも言及する必要があります。したがって、ProgressBarを使用して、BackgroundWorkerを使用せずにクリップボードのコンテンツにアクセスできるソリューションがある場合は、絶対に歓迎します。ありがとう!

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

c# - スレッドはSTAスレッドである必要がありますが、すでに

C#WPFプログラムに関する私の論文に取り組んでいますが、理解できないエラーが発生しました。

私のメインウィンドウコードのどこかで、次のような新しいスレッドを開始しています。

doSearchServerメソッドは次のことを行います。

ServerConnectionクラスは静的です。これは、他のWindowsでもそのクラスが必要なためです。

ServerConnection.authentication()で、クライアント(私のプログラム)は私のサーバーで認証を試みます。パスワードが必要な場合は、次のように新しいPasswordWindowを開きたいと思いました。

PasswordWindowContructorでクラッシュします。STA +ディスパッチャー、MTA +ディスパッチャー、STAのみを試しました。試したものはすべて機能しませんでした...本当にわかりません。

スレッドがSTAスレッドである必要があるとまだ言われている理由を誰かに説明してもらえますか?

どんな助けにも感謝します!!

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

powershell - PowerShell 1.0 で STA モードを使用するには?

私は PowerShell が非常に苦手で、PS2 へのアップグレードが利用できない Windows XP で、自宅で自分の単純なタスクにのみ使用しています。次のテストでは、私の PowerShell 1.0 がデフォルトで MTA モードを使用していることを示しています。

そして、そのような呼び出し...

...常にエラーで失敗します:

単項演算子 '-' の後に式がありません。行:1 文字:2 + -S <<<< TA c:\scripts\file.ps1

PS1 が –STA スイッチを認識していないようです。私は何を間違っていますか?PS1 の STA モードでスクリプトを実行する方法はありますか?

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

asp.net - ファイルブラウザを開こうとするとエラーが発生する

現在、私のWebサイトで、ユーザーがローカル画像から画像をアップロードできるように取得しようとしています。チュートリアルに従いましたが、デバッグして画像フォルダを開こうとすると、次のエラーメッセージが表示されます。

「OLE呼び出しを行う前に、現在のスレッドをシングルスレッドアパートメント(STA)モードに設定する必要があります。Main関数にSTAThreadAttributeがマークされていることを確認してください。この例外は、デバッガーがプロセスに接続されている場合にのみ発生します。」

誰かがここで私を助けてくれますか、私はいくつかの投稿を読みました。しかし、これは私の初めてのことです。私はそれらを本当に理解していません。

ご回答ありがとうございます!

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

.net-4.0 - TeamCityでこのMSpecテストを実行すると、無効な操作例外(STAスレッド以外)が発生するのはなぜですか?

アプリを.NET4に移行する一環として、WPF単体テストの一部をTeamCityで再び機能させるのに苦労しています。

どういうわけかWPFコントロール(たとえばListItem)を使用しているすべてのテストで、以前は取得しなかった例外が発生します。

私はそれが何を意味するのかを理解しています、そしてチェックした後、私のスレッドは確かにSTAではなくMTAであることがわかりました。

私の問題は、これを修正する方法と、この問題がどこから発生するのかがわからないことです...それはTeamCityの設定ですか?MSpec?繰り返しになりますが、.NET4に切り替える前は機能していました。

私は多くの異なる解決策を試しましたが、何もうまくいきませんでした。

また、(TeamCity + MSpec + WPFテストの特定のスタックで)これまで誰もこれを報告しなかったという事実にも少し戸惑っています。これは、どこかで非常に間違ったことをしていることを意味している可能性があります。

手がかりがあれば教えてください!

完全な例外:

この例外の場合、コードは単にListBoxItemをインスタンス化しようとしているだけで、特別なことは何もありませんが、MTAスレッドでそれを実行すると壊れます。

私が試したこと:

  • 現在のスレッドをSTAに設定する

    Thread.CurrentThread.SetApartmentState(ApartmentState.STA)

もちろん、スレッドが開始する前にのみ可能であるため、機能しません

  • STAとして初期化された別のスレッドでコードを実行します。MSpecの性質上、異なるメソッドが異なる時間に呼び出されるため、同じスレッドですべてを実行することはできないため、非常に複雑です。より正確には、「Becauseof」ステートメントと同じスレッドで「Establishcontext」を実行することはできません。

  • STAThread属性を使用します...はい、しかしどこですか?私が試したどこでも働いたことはありません

失敗したテストの例:

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

asp.net - ASP.NET WCFサービスエラー「多くのUIコンポーネントがこれを必要とするため、呼び出し元のスレッドはSTAである必要があります。」?

いくつかの.netアセンブリを使用するウィンドウワークフローがいくつかあります。これらのワークフローウィンドウからいくつかのハードウェアにアクセスしています。仮想ディレクトリ方式を介してIISで公開されている私のXYZサービスは、これをすべて支援します。次に、これらのワークフローを.NetWebアプリケーションから使用します。wcfサービスとWebクライアントを作成しました。私のwcfサービス(Webクライアント要求)はワークフローをロードし(成功)、実行を試みます。

問題は、ロードされたワークフローの実行を呼び出すときに、「多くのUIコンポーネントがこれを必要とするため、呼び出し元のスレッドはSTAである必要がある」という例外が発生することです。