在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。

简介:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public partial class UCInfo : UserControl
{
public UCInfo()
{
InitializeComponent();
}
ManualResetEvent neverSetEvt = new ManualResetEvent( false );
delegate void InvokeDelegate();
public void SetInfo( string info)
{
lblInfo.Invoke( new InvokeDelegate(() => { lblInfo.ForeColor = Color.Green; }), null );
lblInfo.Invoke( new InvokeDelegate(() => { lblInfo.Text = info; }), null );
ThreadPool.RegisterWaitForSingleObject(neverSetEvt, (obj, bol) =>
{
if (lblInfo.IsHandleCreated)
{
lblInfo.Invoke( new InvokeDelegate(() => { lblInfo.Text = "" ; }), null );
}
}, null , 600000, true );
}
public void SetInfo( string info, Color color)
{
lblInfo.Invoke( new InvokeDelegate(() => { lblInfo.ForeColor = color; }), null );
lblInfo.Invoke( new InvokeDelegate(() => { lblInfo.Text = info; }), null );
ThreadPool.RegisterWaitForSingleObject(neverSetEvt, (obj, bol) =>
{
if (lblInfo.IsHandleCreated)
{
lblInfo.Invoke( new InvokeDelegate(() => { lblInfo.Text = "" ; }), null );
}
}, null , 600000, true );
}
}<br><br>当调试运行中突然关闭软件时,
?
1
lblInfo.Invoke(labchange);语句就出先了“在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。”错误。<br>解决办法是在lblInfo.Invoke(labchange);前加一个 if (lblInfo.IsHandleCreated)判断就可以了

  




本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/p/3904076.html,如需转载请自行联系原作者

相关文章
|
4月前
|
消息中间件 存储 API
【C/C++】回调函数详解&注册窗口类&LRESULT & CALLBACK详解以及游戏中的应用
【C/C++】回调函数详解&注册窗口类&LRESULT & CALLBACK详解以及游戏中的应用
53 0
c#编程:事件delegate学习笔记-3
c#编程:事件delegate学习笔记-3
|
缓存 负载均衡 微服务
多服务间的调用
上文我们把我们项目注册到服务器上了,但是在微服务中,我们会有多个服务,同时也会使用A服务调用B服务的接口。springcloud netflix这里有两种方式ribbon和feign,我们分别介绍。
98 0
多服务间的调用
|
C#
C# 跨线程调用控件
原文: C# 跨线程调用控件 在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停止响应。  同时我们又需要在工作线程中更新UI界面上的控件, 下面介绍几种常用的方法   阅读目录 线程间操作无效 第一种办...
1514 0

热门文章

最新文章