在运行Web方法时无法与表单进行交互?

时间:2011-11-02 20:34:18

标签: c# webmethod

我制作了一个C#Windows窗体。它使用Web方法,然后我想将webmethod结果写入列表框。 web方法循环运行,直到我按下停止按钮。

我遇到的问题是,我无法点击表单上的任何控件,甚至无法移动表单本身。

将webmethods结果添加到列表框的功能正在运行。但它几乎没用,因为我无法向下滚动添加项目列表。

我在每个网络方法调用之间放置了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;
}

2 个答案:

答案 0 :(得分:1)

您应该使用Threads并使用Thread-Safe Calls to Windows Forms Controls更新列表框内容。否则将抛出异常,因为默认情况下不允许从另一个线程更改表单的属性。

答案 1 :(得分:1)

调用静态方法Thread.Sleep(X)将导致当前线程(在您的情况下,您的应用程序的UI线程)进入休眠状态。所以,是的,这将使您的应用程序无响应。您需要使用Task或致电ThreadPool.QueueUserWorkItem从后台工作线程开展工作。

但是,请注意,您无法直接从应用程序的UI线程以外的任何线程更新UI元素,您需要调用控件的Invoke方法。