查看MSDN如下:
Control..::.Invoke ---> 在拥有此控件的基础窗口句柄的线程上执行委托。
Control..::.BeginInvoke ---> 在创建控件的基础句柄所在线程上异步执行委托。
显然,Invoke() 与 BeginInvoke() 方法间的主要区别在于“异步”关键字眼。
也就是说,
Invoke() 调用时,会阻塞当前线程,等到 Invoke() 方法返回才继续执行后面的代码,表现出“同步”的概念。
BeginInvoke() 调用时,当前线程会启用线程池中的某个线程来执行此方法,当前线程不被阻塞,继续运行后面的代码,表现出“异步”的概念。
EndInvoke() ,在想获取 BeginInvoke() 执行完毕后的结果时,调用此方法来获取。
控件为何会需要Invoke()或BeginInvoke()方法呢?
因为控件的这样一个特点:控件的数据(或状态)值只能在创建控件的那个线程上被更改。也就是说如果控件是在线程A上创建的,则其它任何线程B都不允许修改控件的值,只可以访问(读取)。控件的值只能在线程A上进行更改。
基于以上原因,而又有这样的需求:控件在线程A上创建,又要在线程B中更改其值。所以,Invoke()/BeginInvoke() 就出现了。使线程B可以间接地更改在线程A中创建的控件的值。真正更改控件值的操作仍然是在线程A的上下文中执行。
转自:http://blog.csdn.net/xiaogang3438792/archive/2009/05/11/4166911.aspx
分享到:
相关推荐
### Invoke与BeginInvoke的区别 #### 一、基本概念 在.NET框架中,`Invoke` 和 `BeginInvoke` 是两个常用的方法,主要用于实现跨线程访问控件或执行操作。这两种方法通常出现在多线程编程场景中,特别是当涉及到UI...
#### 二、Invoke和BeginInvoke的使用方式及区别 `Invoke`和`BeginInvoke`方法都接受一个委托作为参数,并用于跨线程调用。这两种方法的核心区别在于同步与异步的处理方式: ##### 1. Invoke - **同步调用**:当...
就Invoke和BeginInvoke进行对比介绍,穿插了一些例子在里面
c# 中Invoke和BeginInvoke_区别, 适合初学者,一看就会
本文将深入探讨invoke和beginInvoke的区别、使用场景以及它们在多线程环境中的重要性。 1. **委托(Delegate)的理解**: - 委托是.NET中一种类型安全的函数指针,它可以引用一个或多个方法。通过委托,我们可以将...
在C#编程中,`Invoke` 和 `BeginInvoke` 是两个关键的方法,它们主要用于处理多线程环境下的UI更新问题。这两个方法都是Windows Forms或WPF应用程序中`Control`类的成员,它们允许非UI线程对UI组件进行操作,因为...
C_窗体中Invoke和BeginInvoke方法详解 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软 主要包括C# ASP.NET SQLDBA 源码 毕业设计 开题报告 答辩PPT等
在Windows 7操作系统中安装Microsoft SQL Server 2008时,可能会遇到一个常见的错误,即"Invoke或BeginInvoke不能在控件上被调用,直到窗口句柄被创建"。这个错误通常与应用程序试图在窗口句柄未准备好时执行某些...
在Windows 7操作系统中安装Microsoft SQL Server 2008时,可能会遇到一个特定的问题,即在安装过程中显示“Invoke或BeginInvoke不能在控件上被调用,直到窗口句柄已被创建”的错误。这个错误通常表明安装程序与系统...
本文实例总结了C#子线程更新UI控件的方法,...1.使用控件自身的invoke/BeginInvoke方法 2.使用SynchronizationContext的Post/Send方法更新 具体实现如下: 1.使用控件自身的invoke/BeginInvoke方法 Control类实现了ISyn
与`Invoke/BeginInvoke`类似,`Dispatcher.Invoke`和`Dispatcher.BeginInvoke`允许在非UI线程中安全地操作UI元素。WPF的`Dispatcher`提供了优先级等级,允许根据需要调整操作的执行顺序。 3. **...
类似于`Invoke/BeginInvoke`,你可以使用`Dispatcher.Invoke`和`Dispatcher.BeginInvoke`来确保在UI线程上执行操作。 实例对比这些方法可以帮助初学者理解它们的差异和适用场景。例如,`Invoke`适合于需要立即更新...
- .NET Framework为解决这个问题提供了`Control.Invoke`和`Control.BeginInvoke`方法。这两个方法允许在非UI线程上调度对UI控件的操作,确保它们在正确的上下文中执行。 - `Invoke`是同步的,会阻塞当前线程直到UI...
- 然后,你可以创建这个委托的实例,并通过控件的Invoke或BeginInvoke方法调用它。Invoke是同步的,会阻塞当前线程直到UI操作完成;而BeginInvoke是异步的,不会阻塞线程,但可能会导致顺序问题,因此需要谨慎使用...
C__BeginInvoke_和Invoke区别 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软 主要包括C# ASP.NET SQLDBA 源码 毕业设计 开题报告 答辩PPT等
在Windows Forms或WPF等UI环境中,由于UI元素(如控件)只能在其创建的线程(即UI线程)中进行修改,因此,当需要在后台线程更新UI时,`Invoke`和`BeginInvoke`就显得尤为重要。这两个方法都是`Control`类的成员,...
### C#中的`Invoke`与`BeginInvoke`详解 #### 一、基本概念 在C#编程中,尤其是在处理GUI应用程序时,`Invoke`和`BeginInvoke`是两个非常重要的方法,它们主要用于确保UI更新操作在正确的线程上执行。这是因为.NET...
在C#编程中,Invoke和BeginInvoke是两个与线程交互和UI更新紧密相关的概念,尤其是在Windows Forms应用程序中。这两个方法主要用于解决多线程环境下的界面更新问题,确保非UI线程安全地修改UI组件。 首先,理解这两...
一、使用控件自身的Invoke/BeginInvoke方法 Control类实现了ISynchronizeInvoke接口,我们可以使用Invoke方法异步更新UI控件。Invoke方法有两个实现:Object Invoke(Delegate);和Object Invoke(Delegate,Object[] )...