我想下載一張圖片,然後將其顯示在圖片框中。防止表單凍結
起初我是這樣的:
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)中調用它們。並在您的長時間運行功能中通過BeginInvoke更新您的GUI元素。要從GUI線程確定是否有什麼事情發生,你可以檢查backgroundWorker.IsBusy; – Oliver 2009-08-24 13:59:47
欲瞭解更多信息,請看:http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx – Oliver 2009-08-24 14:00:27
@Oliver:真的,他們非常適合開發者,他們做了很多我們的工作。 – ThePower 2009-08-24 14:01:35