在维护代码时,我发现我们的一个后台工作者中出现了无限挂起的情况。该工作者需要访问一个脚本文件。原始代码是这样编写的:如果没有定义脚本文件,则弹出一个文件对话框,以允许用户选择一个脚本文件。它看起来像这样:
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
,但几乎所有的调用方法都需要从控件中进行调用。而相关的后台工作是由一个不扩展Control
的单独类运行的。我应该使用调用带有bgworker类的表单吗?还是有其他的方法可以中断线程以等待用户输入?