c# – Windows窗体中的跨线程调用有什么问题?
发布时间:2020-12-15 07:49:01 所属栏目:百科 来源:网络整理
导读:我遇到 Windows窗体应用程序的问题. 必须从另一个线程显示表单.所以在表单类中,我有以下代码: private delegate void DisplayDialogCallback();public void DisplayDialog(){ if (this.InvokeRequired) { this.Invoke(new DisplayDialogCallback(DisplayDia
我遇到
Windows窗体应用程序的问题.
必须从另一个线程显示表单.所以在表单类中,我有以下代码: private delegate void DisplayDialogCallback(); public void DisplayDialog() { if (this.InvokeRequired) { this.Invoke(new DisplayDialogCallback(DisplayDialog)); } else { this.ShowDialog(); } } 现在,每次运行它,都会抛出一个InvalidOperationException行this.ShowDialog();: “跨线程操作无效:控制’SampleForm’从一个线程访问,除了它创建的线程. 这段代码怎么了?是不是有效的方式进行跨线程通话? ShowDialog()有什么特别之处吗? 解决方法
尝试这个:
private delegate void DisplayDialogCallback(); public void DisplayDialog() { if (this.InvokeRequired) { this.Invoke(new DisplayDialogCallback(DisplayDialog)); } else { if (this.Handle != (IntPtr)0) // you can also use: this.IsHandleCreated { this.ShowDialog(); if (this.CanFocus) { this.Focus(); } } else { // Handle the error } } } 请注意InvokeRequired返回
因此,如果控件尚未创建,返回值将为false! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |