C#|C# 多线程更新界面的错误的解决方法
目录
这样做了之后,又会导致一个常见的问题,就是很多开发人员会在次线程里去更新界面的内容。比如下面的例子:
【C#|C# 多线程更新界面的错误的解决方法】
文章图片
在上面的例子里,创建
Win forms
应用,然后增加下面的代码:using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1{public partial class Form1 : Form{public Form1(){InitializeComponent(); }private void button1_Click(object sender, EventArgs e){var thread2 = new System.Threading.Thread(WriteTextUnsafe); thread2.Start(); }private void WriteTextUnsafe() =>textBox1.Text = "This text was set unsafely."; }}
这里就是使用线程来直接更新界面的内容,就会导致下面的出错:
文章图片
这样在调试的界面就会弹出异常,但是有一些开发人员不是去解决这个问题,而是去关闭开发工具的选项,不让弹出这个界面。或者不使用调试方式。
其实上面的代码是有问题的,我们需要把它们修改为下面这种形式:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1{public partial class Form1 : Form{public Form1(){InitializeComponent(); }private void button1_Click(object sender, EventArgs e){var threadParameters = new System.Threading.ThreadStart(delegate { WriteTextSafe("This text was set safely."); }); var thread2 = new System.Threading.Thread(threadParameters); thread2.Start(); }public void WriteTextSafe(string text){if (textBox1.InvokeRequired){// Call this same method but append THREAD2 to the textAction safeWrite = delegate { WriteTextSafe($"{text} (THREAD2)"); }; textBox1.Invoke(safeWrite); }elsetextBox1.Text = text; }}}
这样问题,就得了解决。这里使用了委托的方式。
到此这篇关于C# 多线程更新界面的错误方法详情的文章就介绍到这了,更多相关C# 多线程更新界面的错误方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 爱就是希望你好好活着
- 昨夜小楼听风
- 知识
- 死结。
- 我从来不做坏事
- 《跨界歌手》:亲情永远比爱情更有泪点
- 【译】20个更有效地使用谷歌搜索的技巧
- 烦恼和幸福
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式