私はONEのコンピュータを除いて、完全に動作するアプリケーションを持っています。このコンピュータでは、SaveFileDialogが開くとアプリケーションがクラッシュします。エラーも例外もありません。WindowsフォームUIスレッドの問題C#
調査の結果、このクラッシュを修正する方法の1つは、これを行うことです。SaveFileDialog新しいスレッドに追加しました。
static void open(object name)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "Microsoft Word Document (.docx)|*.docx";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;
saveFileDialog1.Title = "Where to save the " + (string)name + " ? ";
try
{
th.IsBackground = false;
boule = saveFileDialog1.ShowDialog() == DialogResult.OK;
ptth = saveFileDialog1.FileName;
}
catch (Exception exc)
{ MessageBox.Show(exc.Message); }
}
私はイベントでこれを置く:
Thread th = new Thread(new ParameterizedThreadStart(open));
th.Start("Quotation");
を問題は、私はエラー
現在のスレッドがOLE前に、シングルスレッドアパートメント(STA)モードに設定しなければならないということです...
私は確認しました。私は "[STAT hread] "前に私のメイン。だから私は、「オープン」メソッドでこの行を追加:
th.SetApartmentState(ApartmentState.STA);
しかし、新しいエラーが表示されます。
は
は私が間違って何をしました指定されたCOMアパートメント状態を設定できませんでした。 ?適切なUIスレッドを作成するには?簡単な方法がありますか?
EDIT:アプリでOpenFileDialogを使用して画像を取得していて、完璧に動作するため、それはさらに奇妙です。それはSaveFileDialogのためだけの問題ですか?それは他の何かから来ていますか?
新しいスレッドを推奨する回答がありました。疑問があります。ダイアログボックス*はUIスレッド上になければなりません。未知の理由で何かがうまく動作しない場合は、新しいスレッドで実行することは非常に困難ですが、新しい問題が発生する可能性があります。 –
はい私はあまりにも確かではありませんが、実際にはアプリケーションがクラッシュし、修正する必要があるということです...誰かが別の方法でそれを動作させることを知っているか、適切なスレッドを作る方法を教えてください。 – UnderPaidIntern
savefiledialogクラッシュはどのアプリでも起こりますか? [This](http://superuser.com/questions/985618/save-file-dialog-viewing-libraries-crash-any-all-desktop-applications)は、ライブラリを犯人として挙げています。 InitialDirectory。 – Martheen