1

良い一日、

ここで説明したものと非常によく似たエラーが発生します(ここおよび他のソースの中でも):STAThread missing, but it is there

違いは、私の場合はマルチスレッドを使用していることです。ABackgroundWorkerはドキュメントを生成しており、それが完了するFolderBrowseDialogと、ユーザーが生成されたドキュメントを保存する場所を選択できるポップアップが表示されます。したがって、このエラーが発生する理由を理解できます。イベントと関連コードに を入れることにした理由はFolderBrowseDialogBackgroundWorkerあるスレッドから別のスレッドに文字列を渡す代わりに、パスに直接アクセスできるからです。

面白いことに、PrintDialog動作しますがSaveFileDialogFolderBrowseDialogこのエラーがスローされます。

あなたの考えを聞きたいです。をコードのFolderBrowseDialog外に移動するのが最善でしょうか? BackgroundWorkerカスタムを実装する必要がありますFolderBrowseDialogか? これを回避する方法はありますか?

コメントとアドバイス、そして私の質問を検討するために時間を割いてくださった皆様に、事前に感謝します。とても有難い。

敬具

4

1 に答える 1

2

FolderBrowseDialog は RunWorkerCompleted コールバックで呼び出されていますか、それとも DoWorkコールバックで呼び出されていますか? DoWork コールバックから呼び出す場合は、BackgroundWorker が作成されたSynchronizationContextを使用し、 Sendメソッドを使用して FolderBrowseDialog を表示する必要があります。

http://thedersen.com/2010/05/23/showing-modal-dialogs-from-a-background-thread/は、ウェブ上で見つけることができる最も近い例です。その例では、Workerクラスを使用して SynchronizationContext を格納しています。

于 2012-02-10T12:01:47.113 に答える