SynchronizationContext应用

这个类的应用,官方的说明并不是很多,主要原因是因为微软又出了一些基于SynchronizationContext的类。比如:BackgroundWorker

大家写程序时经常碰到子线程调用UI线程的方法来更新UI。这个时候大家会用到如下办法

private void HandleSomeEvent(object sender, EventArgs e)

{

    if(InvokeRequired)

    {

        BeginInvoke(new EventHandler(HandleSomeEvent), sender, e);

    }

    else

    {

        // Event logic here.

    }

}

但是在我们用到BackgroundWorker的时候,却发现根本不需要再去验证InvokeRequired了,如下代码:

private void AsyncWork_Initialize()

{

    worker = new BackgroundWorker();

    worker.WorkerSupportsCancellation = true;

    worker.DoWork += new DoWorkEventHandler(AsyncWorkDoing);

    worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(AsyncWorkDone);

}



private void AsyncWorkDone(object sender, RunWorkerCompletedEventArgs e)

{

    if (e.Error != null)

    {

        MessageBox.Show(e.Error.Message);

    }

    else if (e.Cancelled)

    {

        MessageBox.Show("数据初始化被取消");

    }

    else

    {

        Object result = e.Result;

        // Event logic here.

    }

}

这因为BackgroundWorker就是用SynchronizationContext的Post方法来回调UI线程的方法的。

这里只是让大家简单了解下SynchronizationContext,至于如何更加灵活的应用它,还需要大家的集思广益。

另外要注意的是:UI线程的SynchronizationContext实际实现类是WindowsFormSynchronizationContext,它重写POST和SEND方法。



                            

你可能感兴趣的:(context)