2011-11-02 59 views
0

我做了一個C#Windows窗體。它使用Web方法,然後我想將webmethod結果寫入列表框。 Web方法在循環中運行,直到我按下停止按鈕。Web方法運行時無法與表單交互?

我遇到的問題是,我無法點擊窗體上的任何控件,甚至無法移動窗體本身。

將webmethods結果添加到列表框的功能正在運行。但是由於我無法向下滾動添加項目列表,所以它幾乎沒用。

我把每個Web方法調用之間1秒臥鋪時間,但是這沒有幫助...

bool stop = false; 
private void button1_Click(object sender, EventArgs e) 
{ 
    stop = false; 
    while (stop == false) { 
     GetTime(textBox1.Text); 
     System.Threading.Thread.Sleep(1000); 
    } 
} 

private void GetTime(string mid) 
{ 
    string i; 
    com.Service test = new com.Service(); 
    i = test.GetZonedDateTimeByMID(mid).ToString(); 
    lstLog.Items.Add(i); 
} 

private void btnStop_Click(object sender, EventArgs e) 
{ 
    stop = true; 
} 
+1

您的winforms應用程序默認有一個線程。如果您使用該窗口,則無法響應新事件。 – rerun

回答

1

調用靜態方法Thread.Sleep(X)將導致當前線程(在您的情況下,您的應用程序的UI線程)進入睡眠狀態。所以是的,這會讓你的應用程序無法響應。您需要通過使用Task或致電ThreadPool.QueueUserWorkItem從後臺工作線程完成您的工作。

但是,請注意,您不能直接從除應用程序的UI線程之外的任何線程更新UI元素,您需要調用控件的Invoke方法。