Dispatcher.BeginInvoke 方法

定义

在与 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 BeginInvokeInvoke 是同步的, 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

返回

DispatcherOperation

调用 BeginInvoke 之后立即返回的对象,可用来与事件队列中挂起执行的委托进行交互。

注解

DispatcherOperation可以通过多种方式使用返回BeginInvoke的对象来与指定的委托进行交互,例如:

  • DispatcherPriority 事件队列中挂起执行时更改委托。

  • 从事件队列中删除委托。

  • 等待委托返回。

  • 获取委托在执行后返回的值。

BeginInvoke 是异步的;因此,控件在调用对象后立即返回到调用对象。

在 WPF 中,只有创建线程 DispatcherObject 才能访问该对象。 例如,从主 UI 线程中分离的后台线程无法更新在 UI 线程上创建的内容 Button 。 为了使后台线程能够访问其 ButtonContent 属性,后台线程必须将工作委托给 Dispatcher 与 UI 线程关联的工作。 这是通过使用或 Invoke BeginInvokeInvoke 是同步的, 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 事件队列中。

返回

DispatcherOperation

调用 BeginInvoke 之后立即返回的对象,可用来与事件队列中挂起执行的委托进行交互。

属性

例外

methodnull

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 BeginInvokeInvoke 是同步的, 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

返回

DispatcherOperation

调用 BeginInvoke 之后立即返回的对象,可用来与事件队列中挂起执行的委托进行交互。

注解

DispatcherOperation可以通过多种方式使用返回BeginInvoke的对象来与指定的委托进行交互,例如:

  • DispatcherPriority 事件队列中挂起执行时更改委托。

  • 从事件队列中删除委托。

  • 等待委托返回。

  • 获取委托在执行后返回的值。

BeginInvoke 是异步的;因此,控件在调用对象后立即返回到调用对象。

在 WPF 中,只有创建线程 DispatcherObject 才能访问该对象。 例如,从主 UI 线程中分离的后台线程无法更新在 UI 线程上创建的内容 Button 。 为了使后台线程能够访问其 ButtonContent 属性,后台线程必须将工作委托给 Dispatcher 与 UI 线程关联的工作。 这是通过使用或 Invoke BeginInvokeInvoke 是同步的, 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

作为参数传递到指定方法中的对象。

返回

DispatcherOperation

调用 BeginInvoke 之后立即返回的对象,可用来与事件队列中挂起执行的委托进行交互。

属性

例外

methodnull

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 BeginInvokeInvoke 是同步的, 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[]

作为指定方法的参数传递的对象数组。

返回

DispatcherOperation

调用 BeginInvoke 之后立即返回的对象,可用来与 Dispatcher 队列中挂起执行的委托进行交互。

属性

例外

methodnull

DispatcherPriority 不是有效的优先级。

注解

arg如果不需要任何参数,则参数可以是null

BeginInvoke 返回一个 DispatcherOperation 对象,该对象可用于在委托位于事件队列中时与委托进行交互。

DispatcherOperation可以通过多种方式使用返回BeginInvoke的对象来与指定的委托进行交互,例如:

  • DispatcherPriority 事件队列中挂起执行时更改委托。

  • 从事件队列中删除委托。

  • 等待委托返回。

  • 获取委托在执行后返回的值。

BeginInvoke 是异步的;因此,控件在调用对象后立即返回到调用对象。

在 WPF 中,只有创建线程 DispatcherObject 才能访问该对象。 例如,从主 UI 线程中分离的后台线程无法更新在 UI 线程上创建的内容 Button 。 为了使后台线程能够访问其 ButtonContent 属性,后台线程必须将工作委托给 Dispatcher 与 UI 线程关联的工作。 这是通过使用或 Invoke BeginInvokeInvoke 是同步的, BeginInvoke 是异步的。 操作将添加到指定DispatcherPriority位置的事件队列Dispatcher中。

如果同时DispatcherPriority执行多个BeginInvoke调用,则会按照调用的顺序执行这些调用。

如果在 BeginInvoke 关闭的某个 Dispatcher 节点上调用,则返回 DispatcherOperation 的状态属性设置为 Aborted

另请参阅

适用于