线程间操作无效: 从不是创建控件“...”的线程访问它(解决方法)
2011-05-19 10:46
489 查看
1、在Form Load事件中加入
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
是最简单的方式!
2、创建代理
delegate void
SetTextCallback(string
text);
创建和启动线程
this
.demoThread =
new
Thread(new
ThreadStart(this
.ThreadProcUnsafe));
this
.demoThread.Start();
线程中要求改主窗体UI中的text属性
private
void
ThreadProcSafe()
{
this
.SetText("This text was set
safely.");
}
调用窗体中的函数用invoke传递参数
private
void
SetText(string
text)
{
if
(this
.textBox1.InvokeRequired)
{
SetTextCallback d = new
SetTextCallback(SetText);
this
.Invoke(d, new
object[] { text });
}
else
{
this
.textBox1.Text = text;
}
}
3、
{
1.定义 委托
delegate
void
myDelegate(
int
i);
myDelegate mydelegate
=
null
;
2.定义方法,显示消息
public
void
ShowMessage(
int
i)
{
this
.textBox1.Text
=
i.ToString();
this
.progressBar1.Value
=
i;
}
3.定义方法,驱动消息
public
void
MyEvent()
{
for
(
int
i
=
0
; i
<
100
; i
++
)
{
Thread.Sleep(
100
);
this
.BeginInvoke(mydelegate,
new
object
[] {i});
}
}
4: 运行
private
void
button1_Click(
object
sender, EventArgs e)
{
mydelegate
=
new
myDelegate(ShowMessage);
Thread myThread
=
new
Thread(MyEvent);
//
IsBackground 是否后台
//
这个属性很重要 .如果 Thread IsBackground 等于false
//
当线程还没有结束时,你点了关闭按钮
//
将抛出An unhandled exception
//
of type 'System.InvalidOperationException'
//
occurred in System.Windows.Forms.dll 异常
myThread.IsBackground
=
true
;
myThread.Start();
}
}
转自 http://hi.baidu.com/lipan112000/blog/item/7f26d741ecc7d1029313c60d.html
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
是最简单的方式!
2、创建代理
delegate void
SetTextCallback(string
text);
创建和启动线程
this
.demoThread =
new
Thread(new
ThreadStart(this
.ThreadProcUnsafe));
this
.demoThread.Start();
线程中要求改主窗体UI中的text属性
private
void
ThreadProcSafe()
{
this
.SetText("This text was set
safely.");
}
调用窗体中的函数用invoke传递参数
private
void
SetText(string
text)
{
if
(this
.textBox1.InvokeRequired)
{
SetTextCallback d = new
SetTextCallback(SetText);
this
.Invoke(d, new
object[] { text });
}
else
{
this
.textBox1.Text = text;
}
}
3、
{
1.定义 委托
delegate
void
myDelegate(
int
i);
myDelegate mydelegate
=
null
;
2.定义方法,显示消息
public
void
ShowMessage(
int
i)
{
this
.textBox1.Text
=
i.ToString();
this
.progressBar1.Value
=
i;
}
3.定义方法,驱动消息
public
void
MyEvent()
{
for
(
int
i
=
0
; i
<
100
; i
++
)
{
Thread.Sleep(
100
);
this
.BeginInvoke(mydelegate,
new
object
[] {i});
}
}
4: 运行
private
void
button1_Click(
object
sender, EventArgs e)
{
mydelegate
=
new
myDelegate(ShowMessage);
Thread myThread
=
new
Thread(MyEvent);
//
IsBackground 是否后台
//
这个属性很重要 .如果 Thread IsBackground 等于false
//
当线程还没有结束时,你点了关闭按钮
//
将抛出An unhandled exception
//
of type 'System.InvalidOperationException'
//
occurred in System.Windows.Forms.dll 异常
myThread.IsBackground
=
true
;
myThread.Start();
}
}
转自 http://hi.baidu.com/lipan112000/blog/item/7f26d741ecc7d1029313c60d.html
相关文章推荐
- 【转】线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法
- 线程间操作无效: 从不是创建控件“”的线程访问它的解决方法
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- C# 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- 线程间操作无效 从不是创建控件“___”的线程访问它”解决方法的疑惑
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- C# 引发“线程间操作无效: 从不是创建控件“XXX”的线程访问它” 解决方法
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- 关于线程间操作无效: 从不是创建控件“xx”的线程访问它,错误解决方法
- [转]线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- “线程间操作无效:从不是创建控件“XX”的线程访问它”的解决方法
- 小结“线程间操作无效: 从不是创建控件的线程访问它” 错误的解决方法
- 线程间操作无效: 从不是创建控件“pbarc”的线程访问它 解决方法
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- 线程间操作无效: 从不是创建控件“”的线程访问它的解决方法~
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~【转】