重複の可能性:
C# で別のスレッドから GUI を更新するには?
スレッド化されたクラスから UI を更新するにはどうすればよいですか? スレッドから更新フォーム コントロールにアクセスできません。特定の各スレッドの進行状況で UI を更新したいと思います。
class MyClass
{
public delegate void CountChangedEventHandler(int vCount, int vIndex);
public event CountChangedEventHandler CountChanged;
private int count;
private int index;
public MyClass(int index)
{
this.index = index;
}
public int Count
{
get { return this.count; }
set
{
this.count = value;
if (this.CountChanged != null)
this.CountChanged(value, this.index);
}
}
public void DoWork(object o)
{
for (int i = 0; i < 10000; i++)
{
this.Count = i;
}
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 3; i++)
{
MyClass myCount = new MyClass(i);
myCount.CountChanged += new MyClass.CountChangedEventHandler(UpdateUI);
ListViewItem lvi = new ListViewItem();
lvi.Text = "Thread #" + i.ToString();
lvi.SubItems.Add("");
listView1.Items.Add(lvi);
ThreadPool.QueueUserWorkItem(new WaitCallback(myCount.DoWork));
}
}
private void UpdateUI (int index, int count)
{
listView1.Items[index].SubItems[0].Text = count.ToString();
}
}