c#线程问题:线程间操作无效:从不是创建控件 的线程访问它InvalidOperationException异常
2010-10-05 21:21
706 查看
出现 InvalidOperationException异常 及其解决方法
问题描述:
通常情况下,显示界面(如Winform)的工作是由一个单独的线程完成的,假设它为线程A。
此时,如果有另外一个线程假设名为线程B,线程B想在线程A的界面中显示一行文本信息,这个时候如果线程B直接调用线程A中的显示控件的方法,就有可能会出现InvalidOperationException异常。
如 界面中有一个richtextbox组件,如果在线程B中使用this.richtextbox.AppendText 方法,就会出现异常。
解决方法:
//在Windows From里面,需要在线程里面访问界面元素,需要使用beginInvoke来完成.
Invoke 方法允许同步执行控件上的方法,而 BeginInvoke 方法则初始化异步执行。
要使用这些方法,必须用与将调用的方法相同的签名声明委托。然后,您可以通过向要调用的方法提供适当的委托来调用窗体上任何控件的 Invoke 或 BeginInvoke 方法。任何必需的参数都包装在 Object 中,并被传输到该方法。
namespace TestInteractiveThread
{
public partial class FormMain : Form
{
private RichTextBox richTextBox;
public delegate void ShowMessageDelegate( string mess);
private void ShowMessage( string mess )
{
this.richTextBox.AppendText(mess);
}
......
......
......
//假如有一个线程B的函数,在函数体里面应该这样让界面显示信息
this.richTextBox.BeginInvoke( new ShowMessageDelegate(ShowMessage) , new objec[]{ "Message to show" } )
//new objec[]{ "Message to show" }表示将参数"Message to show"传递给ShowMessage函数
}// end for class FormMain
}
参考文档:http://hi.baidu.com/dxawddd/blog/item/af1b95e7edc93429b838207c.html “线程间操作无效: 从不是创建控件“progress1”的线程访问它”
问题描述:
通常情况下,显示界面(如Winform)的工作是由一个单独的线程完成的,假设它为线程A。
此时,如果有另外一个线程假设名为线程B,线程B想在线程A的界面中显示一行文本信息,这个时候如果线程B直接调用线程A中的显示控件的方法,就有可能会出现InvalidOperationException异常。
如 界面中有一个richtextbox组件,如果在线程B中使用this.richtextbox.AppendText 方法,就会出现异常。
解决方法:
//在Windows From里面,需要在线程里面访问界面元素,需要使用beginInvoke来完成.
Invoke 方法允许同步执行控件上的方法,而 BeginInvoke 方法则初始化异步执行。
要使用这些方法,必须用与将调用的方法相同的签名声明委托。然后,您可以通过向要调用的方法提供适当的委托来调用窗体上任何控件的 Invoke 或 BeginInvoke 方法。任何必需的参数都包装在 Object 中,并被传输到该方法。
namespace TestInteractiveThread
{
public partial class FormMain : Form
{
private RichTextBox richTextBox;
public delegate void ShowMessageDelegate( string mess);
private void ShowMessage( string mess )
{
this.richTextBox.AppendText(mess);
}
......
......
......
//假如有一个线程B的函数,在函数体里面应该这样让界面显示信息
this.richTextBox.BeginInvoke( new ShowMessageDelegate(ShowMessage) , new objec[]{ "Message to show" } )
//new objec[]{ "Message to show" }表示将参数"Message to show"传递给ShowMessage函数
}// end for class FormMain
}
参考文档:http://hi.baidu.com/dxawddd/blog/item/af1b95e7edc93429b838207c.html “线程间操作无效: 从不是创建控件“progress1”的线程访问它”
相关文章推荐
- c#线程问题:线程间操作无效:从不是创建控件 的线程访问它
- c#线程问题:线程间操作无效:从不是创建控件 的线程访问它InvalidOperationException异常
- c#线程问题:线程间操作无效:从不是创建控件 的线程访问它InvalidOperationException异常
- c#中使用多线程访问winform中控件的若干问题 解决线程间操作无效: 从不是创建控件的线程访问它
- 4000 c#关于“线程间操作无效: 从不是创建控件的线程访问它”的问题
- 线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析
- 黑马程序员-解决系统报错“线程间操作无效: 从不是创建控件" txtbox1" 的线程访问它”问题的方法
- 线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析
- C#线程间操作无效: 从不是创建控件" XX" 的线程访问它
- c# 线程间操作无效: 从不是创建控件“textBox1”的线程访问它。解决方法
- 线程间操作无效:从不是创建控件“XX”的线程访问它,多线程问题
- c# 线程间操作无效: 从不是创建控件“0”的线程访问它
- C#错误---线程间操作无效: 从不是创建控件"Form1"的线程访问它.
- c# 线程间操作无效: 从不是创建控件“FormMain”的线程访问它
- 线程间操作无效: 从不是创建控件“...”的线程访问它 问题解决
- C#线程之间操作无效|不允许访问控件(c# 线程间操作无效: 从不是创建控件“”的线程访问它)
- BackGroundWorker解决“线程间操作无效: 从不是创建控件的线程访问它” (C# VS2008)
- 线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析
- 线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析
- 【问题解决】线程间操作无效:从不是创建控件“textBox1”的线程访问它