2011-03-05 49 views
0

我在c#中創建了一個Windows應用程序,其中我從給定的url下載結果。但下載結果是一個漫長的過程,我的窗體凍結,我失去控制的形式。雖然數據正在下載,我甚至不能移動或最小化窗體。我已經更新了窗體上的進度條,但我無法控制窗體。我創建了一個子線程,我調用的方法是下載數據,但是這個線程無法更新進度條。我試過但不能使用後臺工作器(因爲它說跨線程通信不允許) 有沒有什麼辦法通過這種方式,我可以將進度條保持在相同的形式,而不會失去對該形式的控制?在c#窗口應用程序中下載數據時,表格控件丟失

在此先感謝先生!

回答

1

如果您正在使用WebClient

webClient.DownloadString(uri)webClient.DownloadData(uri)webClient.DownloadFile(uri)

嘗試用這個代替

webClient.DownloadStringAsync(Uri)webClient.DownloadDataAsync(Uri)webClient.DownloadFileAsync(uri)

異步方法都有一定的完成事件處理程序,對於如。 DownloadFileCompleted,您可以在下載完成時使用它。

由於您的「跨線程操作無效」錯誤,請閱讀this post

+0

+1 - 我不是一個真正的.NET人 - 這看起來像正確的方式來做我所描述的 - .NET的方式... – tpow 2011-03-05 17:12:35

0

您正在構建一個web應用程序嗎?如果是這樣,我建議使用進度條的客戶端代碼,並讓服務器處理返回有效負載的操作 - 甚至可以通過AJAX返回。

如果它不是一個Web應用程序,我建議在一個單獨的線程上關閉其中一個操作。您可以使用類作用域變量將進度轉發到進度欄。

相關問題