でのWinForms GUI非同期の更新Iは、Windowsフォームアプリケーションを、私はこれ、asynchrnoouslyコントロールを更新しようとしているんだ - この質問に私を導いた - もちろん:多くの理解をグーグルで、トラブルの後How to update the GUI from another thread in C#?匿名メソッド
#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); });
は(引数の例外を投げています)は、キャッチブロックがキャッチしていないことを示します。 try {} catch {}が例外をキャッチしないのはなぜですか?
ああ、それは理にかなっています!そして、あなたは正しい、それははるかに読みやすいです。ありがとう! – derekantrican
さらに効率的です。 'Invoke'はスレッドスイッチの原因となる比較的高いオーバーヘッドを持っています... – Phil1970