在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。
本文转载:http://blog.csdn.net/playing9c/article/details/7471918
http://blog.csdn.net/beelinkerlidejun/article/details/4772491
http://www.cnblogs.com/fish124423/archive/2012/10/16/2726543.html
C#窗体的多线程一直是个难题,总是要出现奇奇怪怪的错误。今天开发alexSEO软件时,出现了在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。主要出现问题代码如下:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
txtRFID_Click(null, null); }
private void txtRFID_Click(object sender, EventArgs e)
{
Thread thread = new Thread(() =>
{
if (this.IsHandleCreated)
this.BeginInvoke(new MethodInvoker(() =>
{
this.txtRFID.Enabled = false;
})); int iRet = -;
string strTid = "";
iRet = WriteCardHelper.Instance.ReadTID(ref strTid); //读取耗时的代码;
//注意:耗时的代码不能放在 this.BeginInvoke(new MethodInvoker(() => 耗时代码 })); //中执行;否则没有产生异步的效果。
//BeginInvoke中只能放置操作控件的代码。BeginInvoke将子线程线程通过委托抛向UI主线程 。 if (this.IsHandleCreated)
this.BeginInvoke(new MethodInvoker(() =>
{
this.errorProvider.SetError(this.txtRFID, "");
if ( == iRet)
{
WriteCardHelper.Instance.SetAlarm();
this.txtRFID.Text = strTid;
this.txtRFID.BackColor = Color.White;
this.errorProvider.SetError(this.txtRFID, "");
}
else
{
this.txtRFID.Text = "";
this.txtRFID.BackColor = Color.Pink; }
this.txtGasBottleNo.Focus();
this.txtRFID.Enabled = true;
}));
});
thread.IsBackground = true;
thread.Start();
}
客户端:(实现异步打开窗体,该窗体加载的时候会读取设备的数据,但会很耗时,为了防止窗体加载时候由于耗时的代码,导致不能及时的显示出来)
frmGasBottlesInstall frmInstall = new frmGasBottlesInstall(gasBottlesID);
frmInstall.ShowDialog(); //异步打开窗口。
当调试运行中突然关闭软件时,labb.Invoke(labchange);语句就出先了“在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。”错误。想了一通出现这种情况应该有两种可能。第一种应该是界面还来不及响应Invoke,第二种是界面线程已经结束,所以响应不了。最后解决办法是在labb.Invoke(labchange);前加一个if(labb.IsHandleCreated)判断就可以了。
在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。的更多相关文章
- 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke
今天关闭一个窗体,报出这样的一个错误"在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke.",这个不用多想,肯定是那个地方没有释放掉.既然碰到这个问题, ...
- C# 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke [问题点数:40分
注意: this.DateTimeRun = true; new Thread(jishi_kernel).Start(); 线程的启动,不能放在 public Form ...
- 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke 解决办法
增加IsHandleCreated 判断 if (this.IsHandleCreated) { this.Invoke(new EventHandler(delegate { ...... })); ...
- C# 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke
http://www.cnblogs.com/fish124423/archive/2012/10/16/2726543.html 在Invoke(....)之前加上1 this.components ...
- 安装SQL Server出现在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke的错误解决办法
以下是错误报告: 标题: SQL Server 安装程序失败. ------------------------------ SQL Server 安装程序遇到以下错误: 在创建窗口句柄之 ...
- 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。”
出现场景: From1中事件B绑定在事件A,事件A由工厂模式下的设备产生,当离开Form1时,设备中的事件A仍然会触发事件B,此时就会导致如上问题 原因(个人理解): 1.Form1已经被销毁了,但仍 ...
- SQL SERVER 2008安装时出现不能在控件上调用 Invoke 或 BeginInvoke错误 解决方法
或者 SQL SERVER 2008安装时要求重启,但重启后仍要求重启.都可以使用此方法. 注册表的 "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet ...
- SQL Server 安装程序失败 不能在控件上调用 Invoke 或 BeginInvoke
出现这种问题的原因是权限问题,怎么处理呢,使用管理员运行 如果这种方法不行,比如我的就不可以,点击右键 对各个权限对象重新添加完全控制权限. 我的电脑的情况是安装sql2010,然后安装sql管理工具 ...
- 对话框上动态控件的创建、在Picture Control控件上显示图片
1 MFC对话框之上的动态控件的创建 对话框上的控件是MFC类的一个具体对象. 当在对话框之上使用静态控件时,可以根据类向导来为每个控件添加消息.响应函数以及变量. 当需要在对话框中动态的创建某个控 ...
随机推荐
- Linux/Unix 系统分析命令速查手册
1.Hardware CPU information: cat /proc/cpuinfo 物理core个数: 统计core 逻辑CPU个数:统计processor Memory informatio ...
- nf_contrack_netlink.c
/* Connection tracking via netlink socket. Allows for user space * protocol helpers and general trou ...
- poj1151Atlantis(离散化+扫描线)
http://poj.org/problem?id=1151 http://www.cnblogs.com/kane0526/archive/2013/02/26/2934214.html这篇博客写的 ...
- echarts 版本区分导致的错误
在更新到echarts2.2.5这个版本的时候发现map不能正常运行了.....擦!控制台一看: 我就日了,那个小刺老把这朕的源码改了......,找到这一行,果断给轮掉: 都特么好了..... 再透 ...
- HAOI2011 problem b
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 1047 Solved: 434[Submit][ ...
- ASP.NET程序中动态修改web.config中的设置项目(后台CS代码)
using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Dra ...
- MemoryMappedFile 内存映射文件 msdn
http://msdn.microsoft.com/zh-cn/library/dd997372%28v=vs.110%29.aspx 内存映射文件 .NET Framework 4.5 其他版本 1 ...
- NGINX(六)扩展
前言 nginx模块化设计, 添加扩展模块变得容易, 下面开发一个非常简单的扩展模块, 实现返回http请求的头部内容, 配置标记是ping_pong, 配置在NGX_HTTP_LOC_CONF中. ...
- jetty属性
jetty 版本信息 Jetty7 - 此插件更名为jetty-maven-plugin,以便更符合maven2的协定.为了在Web应用做快速应用开发做准备,详见多Web应用源目录. 为 ...
- dynamips虚拟服务:找不到指定设备
刚开始接触dynamips,属于新手, 之前是可以正常使用dynamips的,但不知道什么原因就出现这样的问题 果断重新安装,之后可以正常使用