实现子线程上操作窗体控件
来源:互联网 发布:linux kill进程 编辑:程序博客网 时间:2024/05/06 03:08
方法一:MethodInvoker (不接受参数)
MSDN定义:表示一个委托,该委托可执行托管代码中声明为 void 且不接受任何参数的任何方法。
MSDN备注:MethodInvoker 提供一个简单委托,该委托用于调用含 void 参数列表的方法。 在对控件的 Invoke 方法进行调用时或需要一个简单委托又不想自己定义时可以使用该委托。
private void button1_Click(object sender, EventArgs e) { Thread MyThread = new Thread(new ThreadStart(ThreadFun)); MyThread.Start(); } private void ThreadFun() { MethodInvoker mi = new MethodInvoker(this.InvokeFun); this.BeginInvoke(mi); } private void InvokeFun() { textBox1.Text ="fuck!"; }
方法二:BeginInvoke (可接受参数)
MSDN定义:在创建控件的基础句柄所在线程上异步执行指定委托。
MSDN备注:可异步调用委托并且此方法立即返回。 可以从任何线程(甚至包括拥有该控件句柄的线程)调用此方法。 如果控件句柄尚不存在,则此方法沿控件的父级链搜索,直到它找到有窗口句柄的控件或窗体为止。 如果找不到合适的句柄,BeginInvoke 将引发异常。 此委托方法中的异常被视为未捕获的异常,将发送给应用程序的未捕获的异常处理程序。您可以视需要调用 EndInvoke 来检索委托的返回值,但不要求一定这样做。 EndInvoke 将一直阻止,直到可以检索返回值。
private Thread BeginInvokeThread; private delegate void BeginInvokeDelegate(string name); private void StartMethod() { //C代码段...... string name = "cpsa3"; BeginInvokeDelegate Myname = new BeginInvokeDelegate(BeginInvokeMethod); IAsyncResult testRecult = this.BeginInvoke(Myname, name); //D代码段...... } private void BeginInvokeMethod(string name) { //E代码段 textBox1.Text = name; } private void button1_Click(object sender, EventArgs e) { //A代码段....... BeginInvokeThread = new Thread(new ThreadStart(StartMethod)); BeginInvokeThread.Start(); //B代码段...... }
- 实现子线程上操作窗体控件
- windows mobile上操作马达实现振动
- linux上操作注意事项
- github上操作部署
- eclipse 上操作git
- 使用BackgroundWorker在UI上操作主线程控件
- 如何在子线程中操作窗体上的控件
- 如何在子线程中操作窗体上的控件
- 如何在子线程中操作窗体上的控件
- 如何在子线程中操作窗体上的控件
- C# 子线程操作主窗体控件的解决方法
- 如何在子线程中操作窗体上的控件
- 如何在子线程中操作窗体上的控件
- C# 子线程访问主窗体控件(转载)
- 在子线程中操作窗体上的控件
- C#子线程值传到窗体控件-小结
- 在子线程中更新主窗体的控件
- C# 子线程操作主窗体控件的解决方法
- java
- 《spring安全框架系列springSecurity之我见》总纲
- Linux基本命令
- VC中用汇编实现函数
- 图像处理基本算法 链码 边界跟踪
- 实现子线程上操作窗体控件
- iphone应用程序开发指南(笔记1)
- I帧、P帧和B帧的特点
- linux文件读写浅析
- 观察者模式学习B
- APPWEB + PHP5 + SQLITE3 + MATRIXSSL移植到ARM LINUX
- Android 关于inflate
- WTL之父Nenad Stefanovic访谈录
- 解开 Windows 下的临界区中的代码死锁