日期:2014-05-18  浏览次数:21062 次

请问,这种轮询功能怎么实现
private void button26_Click(object sender, EventArgs e)
  {
  work();
  while(i ==0) //轮询
  {
  textBox1.Text = i.Tostring();
  }
  }
private void work()
  {
  //很多代码,不知道要执行多长时间
  i = 0;
  }


请问,上面的代码,执行work方法不知时间有多长,如何轮询,使得i = 0的时候,执行textBox1.Text = i.Tostring();

------解决方案--------------------
本身work是同步的方法,也就是

while(i ==0) 的时候,work已经执行完了。干嘛要轮询,多此一举。
------解决方案--------------------
目前的代码 work 方法执行时是阻塞的,会造成界面失去响应,下面的轮询也没意义,假如你是想等 work 完了修改下 textBox1.Text 值,可以考虑使用子线程执行 work
C# code
private void button26_Click(object sender, EventArgs e)
{
    ThreadPool.QueueUserWorkItem(param =>
    {
        work();
        this.Invoke((MethodInvoker)(() => textBox1.Text = i.Tostring()));
    });
}

------解决方案--------------------
探讨

引用:

目前的代码 work 方法执行时是阻塞的,会造成界面失去响应,下面的轮询也没意义,假如你是想等 work 完了修改下 textBox1.Text 值,可以考虑使用子线程执行 work
C# code
private void button26_Click(object sender, EventArgs e)
{
ThreadPool.QueueUserW……