1

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

当我执行我的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;
            }
        }
     }

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

4

2 回答 2

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();
于 2013-07-03T18:24:22.263 回答
0

尝试将循环放入:

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

     }
 });
于 2013-07-03T18:22:54.830 回答