Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多线程不';不要刷新表格_C#_Multithreading - Fatal编程技术网

C# 多线程不';不要刷新表格

C# 多线程不';不要刷新表格,c#,multithreading,C#,Multithreading,我在处理表单时遇到了多线程问题。问题是:我有一张表格,还有一节课。我在刷新表单屏幕时遇到问题。表单屏幕有五个复选框,它们根据示例类上的五个属性被选中或不选中 public Boolean ip1 { get; set; } public Boolean ip2 { get; set; } public Boolean ip3 { get; set; } public Boolean ip4 { get; set; } public Boolean ip5 { ge

我在处理表单时遇到了多线程问题。问题是:我有一张表格,还有一节课。我在刷新表单屏幕时遇到问题。表单屏幕有五个复选框,它们根据
示例
类上的五个属性被选中或不选中

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(),ip3…
函数中的form类
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个复选框,当我在调试模式下验证所有属性是否为真(我意识到所有属性都为真)并且选中所有复选框时,我认为这是因为线程有时间处理。那么,有人知道线程发生了什么吗?

那么你说的顺序是:

  • 形式开始
  • 表单启动一个线程T1
  • T1再启动五个线程(T5、T6、T7、T8、T9)
  • T1线程设置sample.ip1、2、3、4、5的值
  • T1开始激活以设置复选框
  • 问题在于:T1从步骤3转到步骤4,而T5、6、7、8、9仍在运行

    您应该使用Thread.Join来确保T1不会在其他后台线程继续之前继续

    NB:考虑使用任务并行库,而不是直接玩线程。