Task.Factory.StartNew(() Wait() this.Dispatcher.BeginInvoke(new Action(() 用法
时间: 2024-04-04 14:30:56 浏览: 13
这两个语法都是用于在多线程中更新UI界面的方法。
`Task.Factory.StartNew(() => Wait())` 是使用Task类的方法来启动一个新的线程,然后在该新线程上执行Wait()方法,而不会阻塞主线程,从而使UI界面保持响应性。
`this.Dispatcher.BeginInvoke(new Action(() => ...))` 则是使用WPF程序中的Dispatcher对象来将UI操作调度到UI线程上执行,以避免在非UI线程上更新UI界面所导致的异常。其中,new Action(() => ...)表示要执行的UI操作,而this.Dispatcher则表示当前UI界面的Dispatcher对象。
相关问题
this.Dispatcher.BeginInvoke使用
this.Dispatcher.BeginInvoke 方法是用于在 WPF 或者 WinForms 应用程序中将一个操作调度到 UI 线程上执行的方法。由于 UI 线程是单线程的,如果在非 UI 线程上执行 UI 操作,就会抛出异常或者导致程序崩溃。因此,使用 BeginInvoke 方法可以确保操作在 UI 线程上执行,避免线程冲突和异常。
该方法的语法如下:
```
public DispatcherOperation BeginInvoke(Delegate method, params object[] args);
```
其中,method 参数是一个委托,它指定要在 UI 线程上执行的操作;args 参数是一个可选的数组,它包含要传递给方法的参数。
BeginInvoke 方法将操作加入到 UI 线程的队列中,然后返回一个 DispatcherOperation 对象,该对象可以用于跟踪操作的状态、取消操作或者等待操作完成。
Application.Current.Dispatcher.Invoke 和Application.Current.Dispatcher.BeginInvoke的区别
Application.Current.Dispatcher.Invoke 和 Application.Current.Dispatcher.BeginInvoke 都是用于在UI线程上执行指定的代码。
其中,Application.Current.Dispatcher.Invoke 是同步执行的,即代码执行完毕后,才会继续往下执行。如果在UI线程上执行的操作比较耗时,会导致UI线程被阻塞,造成UI无响应的情况。
而 Application.Current.Dispatcher.BeginInvoke 是异步执行的,即代码执行后,会立即返回,并不会等待代码执行完毕,而是将代码放入UI线程的队列中,等待UI线程空闲时再执行。因此,它不会阻塞UI线程,可以提高UI的响应速度。
总之,如果操作较为简单且不会影响UI响应,可以使用 Invoke;如果操作比较耗时或需要异步执行,建议使用 BeginInvoke。