与所有的UI开发平台一样,.NET下线程开发图形界面同样要遵循一个基本原则:就是对UI对象的操作一定要在产生该UI对象的线程里进行(该线程称作UI线程),因为大部分UI对象都不是线程安全的。
在.NET中,把调用调用放在UI线程里执行是通过Form类及其子类的Invoke()方法实现的(具体的过程请参考其他资料),可以这样做是因为Form对象保存了创建它的线程的信息,而且Form类有一个bool类型的属性InvokeRequired,可以通过它查看当前线程是否为创建该Form对象的线程(UI线程)——如果为true,则表示当前线程不是UI线程,反之则是。下面提供一个例子:
using System.Threading;
using System.Windows.Forms;
namespace csharpTest
{
public class TestForm : Form
{
private Form form1;
private Form form2;
public static void Main()

本文探讨了在.NET的WinForm应用中,处理多线程UI操作时遇到的问题。核心原则是所有UI操作必须在UI线程中进行。通过Form的InvokeRequired属性检查是否需要在UI线程中执行,然而,即使对象在同一线程中创建,也可能在显示前没有分配窗口句柄,导致InvokeRequired异常。示例代码展示了如何正确使用Invoke以及解决在窗口句柄创建前调用Invoke引发的异常。
最低0.47元/天 解锁文章
1051

被折叠的 条评论
为什么被折叠?



