WPF中的同步和异步
同步和异步操作是我们在C/S开发过程中要经常使用的,下面我们来介绍一下WPF中的同步和异步操作。
先来看一下什么是同步、异步:
同步:当前操作在执行过程中,要执行另一个操作,必须等待当前操作完成后,再执行另一个操作。
异步:和同步相反,当前操作在执行过程中,要执行另一个操作,无需等待当前操作完成,即可执行另一个操作,两个操作互不干扰。
那么,在WPF中如何进行同步异步操作呢?看代码。
同步:
Action action = new Action(delegate() {
Thread.Sleep(5000);
MessageBox.Show("123");
});
action.Invoke();
异步:
Action action = new Action(delegate() {
Thread.Sleep(5000);
MessageBox.Show("123");
});
action.BeginInvoke(null, null);
两段代码中,我们分别实力话了两个委托,一个用Invoke()方法同步调用,一个用BeginInvoke(null,null)方法异步调用。实际开发过程中,如果,我们使用异步操作时,直接操作对主窗体的对象时,会出现“调用线程无法访问此对象,因为另一个线程拥有该对象。”这样的一个异常,这是因为,我们在异步操作过程中,实际上wpf会新建一个线程处理异步操作,而这个线程是无法访问UI线程的,所以我们要这样在异步中操作主窗口的对象:
Action action = new Action(delegate()
{
Thread.Sleep(5000);
Dispatcher.BeginInvoke(new Action(delegate()
{
this.txtbTime.Text = "123";//操作主窗口的对象
}), null);
});
action.BeginInvoke(null, null);
WPF的同步、异步操作,其实和Winform的没什么太多的不同。大家了多用用就明白了。
原创文章,转载请注明: 转载自.NET开发者
本文链接地址: WPF中的同步和异步
Related posts:
不错,收藏了,下次再来看看
.NET没玩过..呵呵