使用Windows窗体的C#中的实时计数器

时间:2013-07-03 18:17:56

标签: c# .net winforms

如何在我的Windows Form计数行中读取多行计数器?

当我执行Windows Form时,只有在应用程序处理完每个数据时才会显示此计数器。

示例代码

    public Form1()
    {
        InitializeComponent();
        setMessage(string.Empty, this.lblErro);
    }

   private void button1_Click(object sender, EventArgs e) 
   { 
     for (int i = 0; i <= xmlnode.Count - 1; i++)
     {
          int cont = i;                    

          ThreadPool.QueueUserWorkItem(_ =>
          {
              setMessage(++cont + " of " + xmlnode.Count, this.lblCounter);                        
          });
      }

       void setMessage(string message, Label lbl)
        {
            if (InvokeRequired)
            {
                Invoke((MethodInvoker)(() => setMessage(message, lbl)));
            }
            else
            {
                lbl.Text = message;
            }
        }
     }

我尝试了上面的代码,但没有成功。应用程序处理完所有数据时仍会显示消息

2 个答案:

答案 0 :(得分:2)

你需要运行这个循环:

for (int i = 0; i <= xmlnode.Count - 1; i++)
{
    ...
}

关闭主UI线程。有很多方法可以实现这一点,但出于任何原因我更喜欢BackgroundWorker。你可以这样做:

BackgroundWorker _worker = new BackgroundWorker();

然后在ctor

_worker.DoWork += (s, e) =>
{
    // place the entire for loop in here
}

现在当你准备好运行它时,就这样做:

_worker.RunWorkerAsync();

答案 1 :(得分:0)

尝试将循环放入:

ThreadPool.QueueUserWorkItem(_ =>  {
    for (int i = 0; i <= xmlnode.Count - 1; i++)
     {
          int cont = i;   
          setMessage(++cont + " of " + xmlnode.Count, this.lblCounter);                        

     }
 });