动态线程和标签创建

时间:2011-01-06 21:08:02

标签: c# multithreading

我在按钮中有新线程的代码 每当我点击那个按钮时都会创建一个新线程。我想要一些方法,以便我可以在表单上包含一些内容,其中包含所有创建的线程的进度 像列表框一样包含显示完成百分比的标签

var t = new Thread(() =>
        {
            for(int i=0;i<1000;i++)
            {
                 x++;
             }
        });
        t.SetApartmentState(ApartmentState.STA);
        t.Name = projectName;
        t.Start();

对不起,如果听起来很傻

2 个答案:

答案 0 :(得分:1)

首先考虑使用基于任务的方法(仅当您使用.NET 3.5或更高版本时)。

无论如何,当您创建新线程时,您可以在ListBox中添加新标签,并在工作进度继续时更新其内容。
例如:

void ButtonClick(object sender, RoutedEvent e)
{
   Label label = new Label();
   listBox1.Items.Add(label);       

   Task.Factory.StartNew(() =>
   {
       for (int i = 0; i < 100; i++)
       {
          label.Content = (i + 1).ToString() + "%";
       }
   });
}

显然修复了跨线程调用(在WPF中使用Dispatcher.Invoke / Dispatcher.BeginInvoke,或在WinForms中使用label.Invoke)。

答案 1 :(得分:0)

如果你继续计算你启动的线程数,并用索引启动每个线程,那么线程可以更新该索引的进度值。