2011-11-02 58 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方法。