我有一个Windows图形用户界面异步窗体应用程序,我想asynchrnoously更新控制,其中 - 当然 - 使我这样一个问题:How to update the GUI from another thread in C#?更新的WinForms与匿名方法
多少谷歌搜索和烦恼的理解后如何实现#1的答案,我反而转向第二个答案:https://stackoverflow.com/a/661662/2246411
我现在的代码如下所示:
private void showPicture(string name)
{
if (name == "")
{
if (!this.Created || (isNullOrEmpty(comboBoxRepresentative) && isNullOrEmpty(comboBoxState)))
return;
else
{
this.Invoke((MethodInvoker)delegate { pictureBox1.Hide(); });
this.Invoke((MethodInvoker)delegate { labelNoImage.Show(); });
}
}
string url = "http://info.sigmatek.net/downloads/SalesMap/" + name;
try
{
this.Invoke((MethodInvoker)delegate { labelNoImage.Hide(); });
this.Invoke((MethodInvoker)delegate { pictureBox1.Show(); });
this.Invoke((MethodInvoker)delegate { pictureBox1.Load(url); });
}
catch
{
this.Invoke((MethodInvoker)delegate { pictureBox1.Hide(); });
this.Invoke((MethodInvoker)delegate { labelNoImage.Show(); });
}
}
和this.Invoke((MethodInvoker)delegate { pictureBox1.Load(url); });
抛出参数异常(Parameter is not valid
)该捕获块没有捕获。为什么try {} catch {}不会捕获异常?
啊,这很有道理!而且,你是对的,这样更具可读性。谢谢! – derekantrican
而且效率更高。 'Invoke'具有相对较高的开销,因为它会导致线程切换... – Phil1970