1

Windows Formcount row many rows was read でカウンターを実行するにはどうすればよいですか?

このカウンターを実行すると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 に答える