画像をダウンロードして後でピクチャボックスに表示したいと考えています。最初のフォームがフリーズするのを防ぐ
私はこのようでした:
WebClient client = new WebClient();
client.DownloadFile(url, localFile);
pictureBox2.Picture = localFile;
しかし、ダウンロードが行われている間の時間のためのアプリがちょっと凍結されているので、それは完璧ではありませんでした。
は、その後、私はこれに変更:
public class ParamForDownload
{
public string Url { get; set; }
public string LocalFile { get; set; }
}
ParamForDownload param = new ParamForDownload()
{
Url = url,
LocalFile = localFile
};
ThreadStart starter = delegate { DownloadMap (param); };
new Thread(starter).Start();
pictureBox2.Picture = localFile;
private static void DownloadMap(ParamForDownload p)
{
WebClient client = new WebClient();
client.DownloadFile(p.Url, p.LocalFile);
}
しかし、今私は、ファイルがスレッドにアクセスされ、同じ時間に、ファイルに何かをそこにダウンロードしているため、「終了スレッドを待つ」のような何かをしなければなりませんDownloadMapメソッドを使用します。
この問題を解決するための最善の方法はありますか?
BackgroundWorkerのは間違いなくあなたが探しているものです。私はちょうどそれを使用し、それは使いやすいです。 DoWorkイベントに何かを追加し、その結果をe.Resultに入れ、この値をRunWorkerCompletedイベントで使用します。または、長時間実行されている関数がより複雑な場合は、((MethodInvoker)e.Argument).Invoke();あなたの長期的な機能の中でBeginInvokeによってあなたのGUI要素を更新してください。 GUIスレッドから何かがあるかどうかを判断するには、backgroundWorker.IsBusyをチェックします。 – Oliver
詳細については、以下をご覧ください。http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx – Oliver
@Oliver:真実、彼らはかなり開発者フレンドリーです、彼らはたくさんのことをしています私たちの仕事。 – ThePower