Csharp/C#教程:从背景C#线程更新pictureBox是邪恶的吗?分享


从背景C#线程更新pictureBox是邪恶的吗?

首先,下面的代码似乎正在起作用。 它从连续字节流中提取jpeg图像,并在封装数据包校验和正确时将它们显示在pictureBox中。 由于PictureBox是由RxThread异步更新的,因此关注的是间歇性的GUI问题。 这里使用的方法是否正常,或者在向客户展示时可能会崩溃?

public FormMain() { InitializeComponent(); var t1 = new Thread(RxThread) { IsBackground = true }; t1.Start(); } private void RxThread() { while (true) { ... // validate incoming stream var payload = new Byte[payloadSize]; ... // copy jpeg image from stream to payload pictureBox.Image = new Bitmap(new MemoryStream(payload)); } } 

我认为所有对UI控件的访问都应该从UI线程完成。 从不具有底层句柄的线程修改控件可能具有不良影响。 在最好的情况下,将抛出exception,在最坏的情况下,在某些竞争条件发生之前一切似乎都可以(并且您可能花费大量时间尝试复制它)。

使用Invoke方法,传递将在UI线程上执行的委托。

为什么不使用Invoke更新PictureBox

你确定它甚至可以工作吗? 我不明白为什么它不会引发InvalidOperationException: (Cross-thread operation not valid)因为控件正在从创建的线程以外的线程更新。 您应该通过UI线程上调用的委托方法更新UI。

上述就是C#学习教程:从背景C#线程更新pictureBox是邪恶的吗?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1251184.html

(0)
上一篇 2022年11月8日
下一篇 2022年11月8日

精彩推荐