Dispatcher.BeginInvoke 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在与 Dispatcher 关联的线程上异步执行委托。
重载
BeginInvoke(Delegate, Object[]) |
用在其上创建了 Dispatcher 的线程的指定参数异步执行指定委托。 |
BeginInvoke(DispatcherPriority, Delegate) |
按指定的优先级在与 Dispatcher 关联的线程上异步执行指定的委托。 |
BeginInvoke(Delegate, DispatcherPriority, Object[]) |
用在其上创建了 Dispatcher 的线程上的指定参数,按指定优先级异步执行指定委托。 |
BeginInvoke(DispatcherPriority, Delegate, Object) |
按指定的优先级并使用指定的参数在与 Dispatcher 关联的线程上异步执行指定的委托。 |
BeginInvoke(DispatcherPriority, Delegate, Object, Object[]) |
按指定的优先级并使用指定的参数数组在与 Dispatcher 关联的线程上异步执行指定的委托。 |
注解
在 WPF 中,只有创建线程 DispatcherObject 才能访问该对象。 例如,从主 UI 线程中分离的后台线程无法更新在 UI 线程上创建的内容 Button 。 为了使后台线程能够访问其 ButtonContent 属性,后台线程必须将工作委托给 Dispatcher 与 UI 线程关联的工作。 这是通过使用或 Invoke BeginInvoke。 Invoke 是同步的, BeginInvoke 是异步的。 操作将添加到指定DispatcherPriority位置的事件队列Dispatcher中。
BeginInvoke 是异步的;因此,控件在调用对象后立即返回到调用对象。
BeginInvoke 返回一个 DispatcherOperation 对象,该对象可用于在委托位于事件队列中时与委托进行交互。
DispatcherOperation可以通过多种方式使用返回BeginInvoke的对象来与指定的委托进行交互,例如:
在 DispatcherPriority 事件队列中挂起执行时更改委托。
从事件队列中删除委托。
等待委托返回。
获取委托在执行后返回的值。
如果同时DispatcherPriority执行多个BeginInvoke调用,则会按照调用的顺序执行这些调用。
如果在 BeginInvoke 关闭的某个 Dispatcher 节点上调用,则返回 DispatcherOperation 的状态属性设置为 Aborted。
BeginInvoke(Delegate, Object[])
用在其上创建了 Dispatcher 的线程的指定参数异步执行指定委托。
public:
System::Windows::Threading::DispatcherOperation ^ BeginInvoke(Delegate ^ method, ... cli::array <System::Object ^> ^ args);
public System.Windows.Threading.DispatcherOperation BeginInvoke (Delegate method, params object[] args);
member this.BeginInvoke : Delegate * obj[] -> System.Windows.Threading.DispatcherOperation
Public Function BeginInvoke (method As Delegate, ParamArray args As Object()) As DispatcherOperation
参数
- method
- Delegate
对采用 args
中指定参数的方法的委托,该委托将被推送到 Dispatcher 事件队列中。
- args
- Object[]
作为给定方法的自变量传递的对象数组。 可以为 null
。
返回
调用 BeginInvoke 之后立即返回的对象,可用来与事件队列中挂起执行的委托进行交互。
注解
DispatcherOperation可以通过多种方式使用返回BeginInvoke的对象来与指定的委托进行交互,例如:
在 DispatcherPriority 事件队列中挂起执行时更改委托。
从事件队列中删除委托。
等待委托返回。
获取委托在执行后返回的值。
BeginInvoke 是异步的;因此,控件在调用对象后立即返回到调用对象。
在 WPF 中,只有创建线程 DispatcherObject 才能访问该对象。 例如,从主 UI 线程中分离的后台线程无法更新在 UI 线程上创建的内容 Button 。 为了使后台线程能够访问其 ButtonContent 属性,后台线程必须将工作委托给 Dispatcher 与 UI 线程关联的工作。 这是通过使用或 Invoke BeginInvoke。 Invoke 是同步的, BeginInvoke 是异步的。 操作将添加到指定DispatcherPriority位置的事件队列Dispatcher中。
如果在 BeginInvoke 关闭的某个 Dispatcher 节点上调用,则返回 DispatcherOperation 的状态属性设置为 Aborted。
适用于
BeginInvoke(DispatcherPriority, Delegate)
按指定的优先级在与 Dispatcher 关联的线程上异步执行指定的委托。
public:
System::Windows::Threading::DispatcherOperation ^ BeginInvoke(System::Windows::Threading::DispatcherPriority priority, Delegate ^ method);
[System.ComponentModel.Browsable(false)]
public System.Windows.Threading.DispatcherOperation BeginInvoke (System.Windows.Threading.DispatcherPriority priority, Delegate method);
[<System.ComponentModel.Browsable(false)>]
member this.BeginInvoke : System.Windows.Threading.DispatcherPriority * Delegate -> System.Windows.Threading.DispatcherOperation
Public Function BeginInvoke (priority As DispatcherPriority, method As Delegate) As DispatcherOperation
参数
- priority
- DispatcherPriority
相对于调用指定方法的事件队列中的其他 Dispatcher 挂起操作的优先级。
- method
- Delegate
对不采用任何参数的方法的委托,该委托将被推送到 Dispatcher 事件队列中。
返回
调用 BeginInvoke 之后立即返回的对象,可用来与事件队列中挂起执行的委托进行交互。
- 属性
例外
method
为 null
。
priority
不是有效的 DispatcherPriority。
示例
以下示例演示如何将操作置于 .Dispatcher 有关此示例的完整源代码,请参阅 包含Long-Running计算示例的单线程应用程序。
首先,创建一个不接受任何参数的委托。
public delegate void NextPrimeDelegate();
Public Delegate Sub NextPrimeDelegate()
接下来, BeginInvoke(DispatcherPriority, Delegate) 调用它。 由于每个 DispatcherObject 属性都有一个返回 Dispatcher 其关联的属性,因此, Dispatcher 通过查询 DispatcherObject所需的属性(在本例 Button 中为命名 startStopButton
)。 调用采用 BeginInvoke(DispatcherPriority, Delegate) 两个参数:优先级(设置为 DispatcherPriority.Normal)和回调(通过委托 NextPrimeDelegate
实例传入)。
startStopButton.Dispatcher.BeginInvoke(
DispatcherPriority.Normal,
new NextPrimeDelegate(CheckNextNumber));
startStopButton.Dispatcher.BeginInvoke(DispatcherPriority.Normal, New NextPrimeDelegate(AddressOf CheckNextNumber))
注解
如果同时DispatcherPriority执行多个BeginInvoke调用,则会按照调用的顺序执行这些调用。
BeginInvoke 返回一个 DispatcherOperation 对象,该对象可用于在委托位于事件队列中时与委托进行交互。
DispatcherOperation可以通过多种方式使用返回BeginInvoke的对象来与指定的委托进行交互,例如:
在 DispatcherPriority 事件队列中挂起执行时更改委托。
从事件队列中删除委托。
等待委托返回。
获取委托在执行后返回的值。
BeginInvoke 是异步的;因此,控件在调用对象后立即返回到调用对象。
在 WPF 中,只有创建线程 DispatcherObject 才能访问该对象。 例如,从主 UI 线程中分离的后台线程无法更新在 UI 线程上创建的内容 Button 。 为了使后台线程能够访问其 ButtonContent 属性,后台线程必须将工作委托给 Dispatcher 与 UI 线程关联的工作。 这是通过使用或 Invoke BeginInvoke。 Invoke 是同步的, BeginInvoke 是异步的。 操作将添加到指定DispatcherPriority位置的事件队列Dispatcher中。
如果在 BeginInvoke 关闭的某个 Dispatcher 节点上调用,则返回 DispatcherOperation 的状态属性设置为 Aborted。
另请参阅
适用于
BeginInvoke(Delegate, DispatcherPriority, Object[])
用在其上创建了 Dispatcher 的线程上的指定参数,按指定优先级异步执行指定委托。
public:
System::Windows::Threading::DispatcherOperation ^ BeginInvoke(Delegate ^ method, System::Windows::Threading::DispatcherPriority priority, ... cli::array <System::Object ^> ^ args);
public System.Windows.Threading.DispatcherOperation BeginInvoke (Delegate method, System.Windows.Threading.DispatcherPriority priority, params object[] args);
member this.BeginInvoke : Delegate * System.Windows.Threading.DispatcherPriority * obj[] -> System.Windows.Threading.DispatcherOperation
Public Function BeginInvoke (method As Delegate, priority As DispatcherPriority, ParamArray args As Object()) As DispatcherOperation
参数
- method
- Delegate
对采用 args
中指定参数的方法的委托,该委托将被推送到 Dispatcher 事件队列中。
- priority
- DispatcherPriority
相对于调用指定方法的事件队列中的其他 Dispatcher 挂起操作的优先级。
- args
- Object[]
作为给定方法的自变量传递的对象数组。 可以为 null
。
返回
调用 BeginInvoke 之后立即返回的对象,可用来与事件队列中挂起执行的委托进行交互。
注解
DispatcherOperation可以通过多种方式使用返回BeginInvoke的对象来与指定的委托进行交互,例如:
在 DispatcherPriority 事件队列中挂起执行时更改委托。
从事件队列中删除委托。
等待委托返回。
获取委托在执行后返回的值。
BeginInvoke 是异步的;因此,控件在调用对象后立即返回到调用对象。
在 WPF 中,只有创建线程 DispatcherObject 才能访问该对象。 例如,从主 UI 线程中分离的后台线程无法更新在 UI 线程上创建的内容 Button 。 为了使后台线程能够访问其 ButtonContent 属性,后台线程必须将工作委托给 Dispatcher 与 UI 线程关联的工作。 这是通过使用或 Invoke BeginInvoke。 Invoke 是同步的, BeginInvoke 是异步的。 操作将添加到指定DispatcherPriority位置的事件队列Dispatcher中。
如果在 BeginInvoke 关闭的某个 Dispatcher 节点上调用,则返回 DispatcherOperation 的状态属性设置为 Aborted。
适用于
BeginInvoke(DispatcherPriority, Delegate, Object)
按指定的优先级并使用指定的参数在与 Dispatcher 关联的线程上异步执行指定的委托。
public:
System::Windows::Threading::DispatcherOperation ^ BeginInvoke(System::Windows::Threading::DispatcherPriority priority, Delegate ^ method, System::Object ^ arg);
[System.ComponentModel.Browsable(false)]
public System.Windows.Threading.DispatcherOperation BeginInvoke (System.Windows.Threading.DispatcherPriority priority, Delegate method, object arg);
[<System.ComponentModel.Browsable(false)>]
member this.BeginInvoke : System.Windows.Threading.DispatcherPriority * Delegate * obj -> System.Windows.Threading.DispatcherOperation
Public Function BeginInvoke (priority As DispatcherPriority, method As Delegate, arg As Object) As DispatcherOperation
参数
- priority
- DispatcherPriority
相对于调用指定方法的事件队列中的其他 Dispatcher 挂起操作的优先级。
- method
- Delegate
对采用一个参数的方法的委托,该委托将被推送到 Dispatcher 事件队列中。
- arg
- Object
作为参数传递到指定方法中的对象。
返回
调用 BeginInvoke 之后立即返回的对象,可用来与事件队列中挂起执行的委托进行交互。
- 属性
例外
method
为 null
。
priority
不是有效的 DispatcherPriority。
示例
以下示例演示如何将操作置于 .Dispatcher
首先,创建接受一个参数的委托,在本例中为字符串。
private delegate void OneArgDelegate(String arg);
Private Delegate Sub OneArgDelegate(ByVal arg As String)
接下来, BeginInvoke(DispatcherPriority, Delegate, Object) 调用它。 由于每个 DispatcherObject 属性都有一个返回 Dispatcher 其关联的属性,因此, Dispatcher 通过查询 DispatcherObject所需的属性(在本例 Grid 中为命名 tomorrowsWeather
)。 调用采用 BeginInvoke(DispatcherPriority, Delegate, Object) 三个参数:优先级,该优先级设置为 DispatcherPriority.Normal;回调,该回调通过委托 OneArgDelegate
的实例传入;以及一 weather
个名为的字符串,该字符串是回调的参数。
// Schedule the update function in the UI thread.
tomorrowsWeather.Dispatcher.BeginInvoke(
System.Windows.Threading.DispatcherPriority.Normal,
new OneArgDelegate(UpdateUserInterface),
weather);
' Schedule the update function in the UI thread.
tomorrowsWeather.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, New OneArgDelegate(AddressOf UpdateUserInterface), weather)
注解
arg
can be null
if no arguments are needed.
BeginInvoke 返回一个 DispatcherOperation 对象,该对象可用于在委托位于事件队列中时与委托进行交互。
DispatcherOperation可以通过多种方式使用返回BeginInvoke的对象来与指定的委托进行交互,例如:
在 DispatcherPriority 事件队列中挂起执行时更改委托。
从事件队列中删除委托。
等待委托返回。
获取委托在执行后返回的值。
BeginInvoke 是异步的;因此,控件在调用对象后立即返回到调用对象。
在 WPF 中,只有创建线程 DispatcherObject 才能访问该对象。 例如,从主 UI 线程中分离的后台线程无法更新在 UI 线程上创建的内容 Button 。 为了使后台线程访问其 Button内容属性,后台线程必须将工作委托给 Dispatcher 与 UI 线程关联的工作。 这是通过使用或 Invoke BeginInvoke。 Invoke 是同步的, BeginInvoke 是异步的。 操作将添加到指定DispatcherPriority位置的事件队列Dispatcher中。
如果同时DispatcherPriority执行多个BeginInvoke调用,则会按照调用的顺序执行这些调用。
如果在 BeginInvoke 关闭的某个 Dispatcher 节点上调用,则返回 DispatcherOperation 的状态属性设置为 Aborted。
另请参阅
适用于
BeginInvoke(DispatcherPriority, Delegate, Object, Object[])
按指定的优先级并使用指定的参数数组在与 Dispatcher 关联的线程上异步执行指定的委托。
public:
System::Windows::Threading::DispatcherOperation ^ BeginInvoke(System::Windows::Threading::DispatcherPriority priority, Delegate ^ method, System::Object ^ arg, ... cli::array <System::Object ^> ^ args);
[System.ComponentModel.Browsable(false)]
public System.Windows.Threading.DispatcherOperation BeginInvoke (System.Windows.Threading.DispatcherPriority priority, Delegate method, object arg, params object[] args);
[<System.ComponentModel.Browsable(false)>]
member this.BeginInvoke : System.Windows.Threading.DispatcherPriority * Delegate * obj * obj[] -> System.Windows.Threading.DispatcherOperation
Public Function BeginInvoke (priority As DispatcherPriority, method As Delegate, arg As Object, ParamArray args As Object()) As DispatcherOperation
参数
- priority
- DispatcherPriority
相对于调用指定方法的事件队列中的其他 Dispatcher 挂起操作的优先级。
- method
- Delegate
对采用多个参数的方法的委托,该委托将被推送到 Dispatcher 事件队列中。
- arg
- Object
作为参数传递到指定方法中的对象。
- args
- Object[]
作为指定方法的参数传递的对象数组。
返回
调用 BeginInvoke 之后立即返回的对象,可用来与 Dispatcher 队列中挂起执行的委托进行交互。
- 属性
例外
method
为 null
。
注解
arg
如果不需要任何参数,则参数可以是null
。
BeginInvoke 返回一个 DispatcherOperation 对象,该对象可用于在委托位于事件队列中时与委托进行交互。
DispatcherOperation可以通过多种方式使用返回BeginInvoke的对象来与指定的委托进行交互,例如:
在 DispatcherPriority 事件队列中挂起执行时更改委托。
从事件队列中删除委托。
等待委托返回。
获取委托在执行后返回的值。
BeginInvoke 是异步的;因此,控件在调用对象后立即返回到调用对象。
在 WPF 中,只有创建线程 DispatcherObject 才能访问该对象。 例如,从主 UI 线程中分离的后台线程无法更新在 UI 线程上创建的内容 Button 。 为了使后台线程能够访问其 ButtonContent 属性,后台线程必须将工作委托给 Dispatcher 与 UI 线程关联的工作。 这是通过使用或 Invoke BeginInvoke。 Invoke 是同步的, BeginInvoke 是异步的。 操作将添加到指定DispatcherPriority位置的事件队列Dispatcher中。
如果同时DispatcherPriority执行多个BeginInvoke调用,则会按照调用的顺序执行这些调用。
如果在 BeginInvoke 关闭的某个 Dispatcher 节点上调用,则返回 DispatcherOperation 的状态属性设置为 Aborted。