百科问答小站 logo
百科问答小站 font logo



C# 如何在调用控件时做到 Thread-safe(线程安全)? 第1页

  

user avatar   Ivony 网友的相关建议: 
      

如果你看明白了这段例子,应该就不难理解了。

这个例子一共提供了三个处理方式,第一个是不安全的,我们就不用看了。

第二个是使用Invoke方法传一个委托进去,分配到UI线程上执行。一般情况下我们都采用这个方法:

         private void SetText(string text)   {    // InvokeRequired required compares the thread ID of the    // calling thread to the thread ID of the creating thread.    // If these threads are different, it returns true.    if (this.textBox1.InvokeRequired)    {      SetTextCallback d = new SetTextCallback(SetText);     this.Invoke(d, new object[] { text });    }    else    {     this.textBox1.Text = text;    }   }      

将委托用Invoke方法调用,可以将委托中的代码传送到UI线程上安全的执行。在这个委托里面,你可以安全的改变任何控件的状态和值如果你要传递多个参数,看到那个object[]了没?

当然,也可以直接用闭包的形式传进去。


用心看代码,用心写代码。多看多试,这种问题老实说自己试试比来这里提问快多了。




  

相关话题

  如果中国一开始就禁止微软和英特尔AMD进入中国大陆地区,现在的中国大陆地区会出现哪些现象? 
  如何看待 Python 之父 Guido 加盟微软? 
  为什么多数编程语言的赋值在左边?是有什么历史渊源吗? 
  什么是递归? 
  为什么当年 Android 选择用 Java 作为开发语言? 
  计算机专业大学生想要在以后有一份好工作,在大学期间应该及时考哪些证书? 
  2019 年了,C# 发展得怎么样了? 
  JavaScript一个疑问,[ ] (空数组)== true ,具体如下,请问这是为何? 
  靠写代码能买得起一辆奥迪A8吗(中国)? 
  为什么 2010 年前后诞生的语言(如 Golang, Rust, Swift)都是强类型 + 静态? 

前一个讨论
为什么编程语言语法的设计不往缩小与自然语言的差别的方向发展,或者说在这个方向发展得这么慢呢?
下一个讨论
为什么这么使用 C 语言 fgetc() 函数会出现乱码?





© 2025-03-04 - tinynew.org. All Rights Reserved.
© 2025-03-04 - tinynew.org. 保留所有权利