いくつかのコードを維持しているときに、バックグラウンドワーカーに無限のハングアップがあることを発見しました。ワーカーには、スクリプトファイルへのアクセスが必要です。元のコードは、スクリプトファイルが定義されていない場合にファイルダイアログをポップアップして、ユーザーが選択できるようにするために作成されました。これは次のようになります。
private void bgworker_DoWork(object sender, DoWorkEventArgs e)
{
... snip ...
if (String.IsNullOrWhitespace(scriptFile))
{
scriptFile = PromptForScript();
}
... snip ...
}
private string PrompForScript()
{
string script = "";
OpenFileDialog openDialog = new OpenFileDialog();
if (openDialog.ShowDialog() == DialogResult.OK)
{
script = openDialog.FileName;
}
return script;
}
について少し読みましたMethodInvoker
が、ほとんどすべてのinvokeメソッドでは、コントロールから呼び出す必要があります。問題のバックグラウンドワーカーは、拡張されていない別のクラスから実行されていますControl
。そのためにbgworkerでクラスを呼び出すフォームを使用しますか?または、ユーザー入力のためにスレッドを中断する別の方法はありますか?