2017-08-04 57 views
3

我試圖更新一些數據而不詢問Windows應用程序中的用戶,但是當我嘗試下載時,應用程序不可用並且控件不可觸摸。在使用WebClient時無法使用當前應用程序

代碼:

using (WebClient client = new WebClient {Encoding = System.Text.Encoding.UTF8}) 
{ 
string url = "http://domain_name.com/api/getSomeData"; 

res = client.DownloadString(url); 
} 
+2

你需要調查'爲C#await'和'async'行。 – garfbradaz

+1

您正在UI線程上運行下載,因此無法在下載過程中進行響應。您需要了解線程。 – Equalsk

+0

@garfbradaz試圖尋找這個,謝謝 – AliMajidiFard9

回答

1

這是最有可能發生的事情,因爲你是在UI線程上執行代碼。當你的UI線程忙時,它不能泵送窗口消息,例如來自鼠標或鍵盤的輸入事件。您的選項是:

  1. 在單獨的線程上運行此代碼。

  2. 使用異步技術,如WebClient.DownloadStringAsync或DownloadStringTaskAsync。

其中,選項#2是更好的做法。

見該接受的答案封閉的「題外話」的問題的正確使用這兩個選項的例子(儘管數字是從我的名單在這裏交換)how to use async and await on a method that is time comsuming

+1

@hoodacicus,給出每個點的一些示例代碼。 – garfbradaz

+1

正在工作:) – AliMajidiFard9

+0

@ AliMajidiFard9當你得到它應該打擊你的想法:) – hoodaticus

-2

嘗試了以下功能。如果你想我可以解釋給你行

public static string GetWebData(string url) 
    { 
    try { 
     WebRequest request = WebRequest.Create(url); 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     Stream dataStream = response.GetResponseStream(); 
     StreamReader readStream = new StreamReader(dataStream); 
     dynamic data = readStream.ReadToEnd(); 
     readStream.Close(); 
     dataStream.Close(); 
     response.Close(); 
     return data; 
    } catch (Exception ex) { 
     return ""; 
    } 
} 

我希望它能幫助

+0

與OP的問題代碼一樣! – hoodaticus

相關問題