我有一個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