解决线程不能访问用户界面组件的问题

解决线程不能访问用户界面组件的问题 // 因在项目的窗体文本框中要显示COM组件回调函数所传回来的值,
解决线程不能访问用户界面组件的问题
// 谁知测试时竟然显示
解决线程不能访问用户界面组件的问题
// ""System.InvalidOperationException: 线程间操作无效: 从不是创建控件“richTextBox1”的线程访问它。"
解决线程不能访问用户界面组件的问题
// 或者干脆罢工,一个也不给你显示出来.让我大为恼火,毕竟"魔高一尺,道高一丈".于是对此做了些分析与测试.
解决线程不能访问用户界面组件的问题
// 终于顺利解决.
解决线程不能访问用户界面组件的问题
// 究其原因为: 在Windows From里面,需要在线程里面访问界面元素,需要使用BeginInvoke来完成.
解决线程不能访问用户界面组件的问题
// 本示例通过调用cAdd类中的 GetAddResult() 方法,通过事件(AddComplete)实时触发传送计算结果 ,
解决线程不能访问用户界面组件的问题
// 在窗体的richTextBox中显示出来.
解决线程不能访问用户界面组件的问题

解决线程不能访问用户界面组件的问题
using  System;
解决线程不能访问用户界面组件的问题
using  System.Collections.Generic;
解决线程不能访问用户界面组件的问题
using  System.ComponentModel;
解决线程不能访问用户界面组件的问题
using  System.Data;
解决线程不能访问用户界面组件的问题
using  System.Drawing;
解决线程不能访问用户界面组件的问题
using  System.Text;
解决线程不能访问用户界面组件的问题
using  System.Windows.Forms;
解决线程不能访问用户界面组件的问题
解决线程不能访问用户界面组件的问题
namespace  TestInteractiveThread
解决线程不能访问用户界面组件的问题
{
解决线程不能访问用户界面组件的问题    
public delegate void AddHandler(int iResult);
解决线程不能访问用户界面组件的问题    
public partial class Form1 : Form
解决线程不能访问用户界面组件的问题    
{
解决线程不能访问用户界面组件的问题        
private cAdd ca;
解决线程不能访问用户界面组件的问题        
public Form1()
解决线程不能访问用户界面组件的问题        
{
解决线程不能访问用户界面组件的问题            InitializeComponent();
解决线程不能访问用户界面组件的问题            ca 
= new cAdd();
解决线程不能访问用户界面组件的问题            ca.AddComplete 
+= new AddHandler(ca_AddComplete);
解决线程不能访问用户界面组件的问题        }

解决线程不能访问用户界面组件的问题
解决线程不能访问用户界面组件的问题        
public delegate void InvokeInitDelegate(); //不带参数的委托
解决线程不能访问用户界面组件的问题
        public delegate void MyInitDelegate(RichTextBox myRtb, string strTemp); //带参数的异步委托
解决线程不能访问用户界面组件的问题

解决线程不能访问用户界面组件的问题        
void ca_AddComplete(int iResult)
解决线程不能访问用户界面组件的问题        
{
解决线程不能访问用户界面组件的问题            
try
解决线程不能访问用户界面组件的问题            
{
解决线程不能访问用户界面组件的问题                
解决线程不能访问用户界面组件的问题                
// this.richTextBox1.AppendText(Environment.NewLine + iResult.ToString());
解决线程不能访问用户界面组件的问题                
//采用上面的方法将产生下面的错误.
解决线程不能访问用户界面组件的问题                
//"System.InvalidOperationException: 线程间操作无效: 从不是创建控件“richTextBox1”的线程访问它。"
解决线程不能访问用户界面组件的问题
解决线程不能访问用户界面组件的问题
解决线程不能访问用户界面组件的问题                
//在Windows From里面,需要在线程里面访问界面元素,需要使用BeginInvoke来完成.
解决线程不能访问用户界面组件的问题                
//将上面的代码屏蔽掉,采用
解决线程不能访问用户界面组件的问题                
//在创建控件的基础句柄所在线程上,用指定的参数异步执行指定委托。 
解决线程不能访问用户界面组件的问题
                this.richTextBox1.BeginInvoke(new MyInitDelegate(DelegateInitMethod), new object[] this.richTextBox1, iResult.ToString() });
解决线程不能访问用户界面组件的问题            }

解决线程不能访问用户界面组件的问题            
catch (System.Exception err)
解决线程不能访问用户界面组件的问题            
{
解决线程不能访问用户界面组件的问题                strErr 
= err.ToString();
解决线程不能访问用户界面组件的问题               
解决线程不能访问用户界面组件的问题                
//在创建控件的基础句柄所在线程上异步执行委托。在创建控件的基础句柄所在线程上异步执行指定委托。 
解决线程不能访问用户界面组件的问题                
//由 .NET Compact Framework 支持。
解决线程不能访问用户界面组件的问题
                this.BeginInvoke(new InvokeInitDelegate(InvokeInitMethod));
解决线程不能访问用户界面组件的问题
解决线程不能访问用户界面组件的问题                MessageBox.Show(err.ToString());
解决线程不能访问用户界面组件的问题                
//throw new Exception("The method or operation is not implemented.");
解决线程不能访问用户界面组件的问题
            }

解决线程不能访问用户界面组件的问题        }

解决线程不能访问用户界面组件的问题
解决线程不能访问用户界面组件的问题        
private static string strErr = "";
解决线程不能访问用户界面组件的问题        
private void InvokeInitMethod()
解决线程不能访问用户界面组件的问题        
{
解决线程不能访问用户界面组件的问题            
this.richTextBox1.AppendText(strErr);
解决线程不能访问用户界面组件的问题        }

解决线程不能访问用户界面组件的问题
解决线程不能访问用户界面组件的问题        
public void DelegateInitMethod(RichTextBox myRtb, string strTemp)
解决线程不能访问用户界面组件的问题        
{
解决线程不能访问用户界面组件的问题            myRtb.AppendText(System.Environment.NewLine 
+ strTemp);
解决线程不能访问用户界面组件的问题        }

解决线程不能访问用户界面组件的问题
解决线程不能访问用户界面组件的问题        
private void button_Test_Click(object sender, EventArgs e)
解决线程不能访问用户界面组件的问题        
{
解决线程不能访问用户界面组件的问题            
//ca.GetAddResult();  
解决线程不能访问用户界面组件的问题            
//为了说明此问题我们采用下面的线程方法来调用.此时系统将弹出
解决线程不能访问用户界面组件的问题            
//"System.InvalidOperationException: 线程间操作无效: 从不是创建控件“richTextBox1”的线程访问它。"
解决线程不能访问用户界面组件的问题
            System.Threading.Thread myThread = new System.Threading.Thread(
解决线程不能访问用户界面组件的问题            
new System.Threading.ThreadStart(ca.GetAddResult));
解决线程不能访问用户界面组件的问题            myThread.Start();
解决线程不能访问用户界面组件的问题
解决线程不能访问用户界面组件的问题
解决线程不能访问用户界面组件的问题        }

解决线程不能访问用户界面组件的问题
解决线程不能访问用户界面组件的问题        
private void button1_Click(object sender, EventArgs e)
解决线程不能访问用户界面组件的问题        
{
解决线程不能访问用户界面组件的问题            
this.richTextBox1.AppendText ( ca.AddInterlink(10).ToString() );
解决线程不能访问用户界面组件的问题        }

解决线程不能访问用户界面组件的问题       
解决线程不能访问用户界面组件的问题
解决线程不能访问用户界面组件的问题    }

解决线程不能访问用户界面组件的问题    
public class cAdd
解决线程不能访问用户界面组件的问题    
{
解决线程不能访问用户界面组件的问题        
public event AddHandler AddComplete;
解决线程不能访问用户界面组件的问题        
public void GetAddResult()
解决线程不能访问用户界面组件的问题        
{
解决线程不能访问用户界面组件的问题            
int iResult=AddInterlink2(11);
解决线程不能访问用户界面组件的问题            AddComplete(iResult);
解决线程不能访问用户界面组件的问题        }

解决线程不能访问用户界面组件的问题  
解决线程不能访问用户界面组件的问题        
解决线程不能访问用户界面组件的问题        
//1+1+2+3+5+8+13+21..+n
解决线程不能访问用户界面组件的问题
        private static int AddInterlink2(int i)
解决线程不能访问用户界面组件的问题        
{
解决线程不能访问用户界面组件的问题            
int[] x = new int[i+1];
解决线程不能访问用户界面组件的问题            x[
0= 1;
解决线程不能访问用户界面组件的问题            x[
1= 1;
解决线程不能访问用户界面组件的问题            
for (int j = 2; j <= i; j++)
解决线程不能访问用户界面组件的问题            
{
解决线程不能访问用户界面组件的问题                x[j] 
= x[j - 1+ x[j - 2];
解决线程不能访问用户界面组件的问题            }

解决线程不能访问用户界面组件的问题            
return x[i];
解决线程不能访问用户界面组件的问题        }

解决线程不能访问用户界面组件的问题
解决线程不能访问用户界面组件的问题        
//也可采用下面的方法
解决线程不能访问用户界面组件的问题

解决线程不能访问用户界面组件的问题        
private int x1=1,x2 = 1;
解决线程不能访问用户界面组件的问题        
//1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 +  + n
解决线程不能访问用户界面组件的问题        
//x1,x2,  x1, x2, x1, x2, x1, x2,.
解决线程不能访问用户界面组件的问题        
//x1,x2,  x3, x1, x2, x3, . 
解决线程不能访问用户界面组件的问题
        public  StringBuilder  AddInterlink(int i)
解决线程不能访问用户界面组件的问题        
{
解决线程不能访问用户界面组件的问题            StringBuilder s1 
= new StringBuilder();
解决线程不能访问用户界面组件的问题            s1.Append(x1.ToString() 
+","+ x2.ToString()+","); ;
解决线程不能访问用户界面组件的问题            
int j=2;
解决线程不能访问用户界面组件的问题            
while (j < i)
解决线程不能访问用户界面组件的问题            
{
解决线程不能访问用户界面组件的问题                x1 
+= x2;
解决线程不能访问用户界面组件的问题                x2 
+= x1;
解决线程不能访问用户界面组件的问题                s1.Append(x1.ToString() 
+","+ x2.ToString()+",");   
解决线程不能访问用户界面组件的问题                j
+=2;
解决线程不能访问用户界面组件的问题            }

解决线程不能访问用户界面组件的问题            
return s1;
解决线程不能访问用户界面组件的问题        }

解决线程不能访问用户界面组件的问题    }

解决线程不能访问用户界面组件的问题}

你可能感兴趣的:(线程)