我遇到多线程问题,使用表单。问题是:我有一个表格,还有一个班级。我有问题刷新表单屏幕。表单屏幕有五个复选框,根据我sample
类的五个属性进行检查。
public Boolean ip1 { get; set; }
public Boolean ip2 { get; set; }
public Boolean ip3 { get; set; }
public Boolean ip4 { get; set; }
public Boolean ip5 { get; set; }
主窗体类有一个函数private void test()
,在加载窗体时调用它:
new Thread(test).Start();
private void test()
函数调用sample.getCon()
类中的sample
,此函数getCon()
调用更多五个线程,这些线程使用不同的IP进行ping操作然后设置函数ip1, ip2, ip3...
内的表单类private void test()
的属性刷新表单:
this.BeginInvoke((Action)(() =>
checkBox1.Checked = sample.ip1;
checkBox1.Checked = sample.ip2;
checkBox1.Checked = sample.ip3;
checkBox1.Checked = sample.ip4;
checkBox1.Checked = sample.ip5;
)
表单有时会检查2或3个复选框,有时会检查4或3,当我处于调试模式时,验证所有属性是否都为真(我意识到所有属性都是真的)并且所有复选框都被检查,我认为这是因为线程有时间处理。那么,有人知道线程发生了什么?
答案 0 :(得分:2)
所以你说的是这个序列:
问题是:T1从步骤3进入步骤4 而T5,6,7,8,9仍然在运行
您应该使用Thread.Join来确保在其他后台线程继续之前T1不会继续。
注意:考虑使用任务并行库而不是直接使用线程。 http://msdn.microsoft.com/en-us/library/vstudio/dd537609.aspx