您的位置:首页 > 其它

什么是.Net的异步机制(线程间通信) - step 5

2012-09-26 13:57 405 查看

什么是.Net的异步机制(线程间通信) - step 5

前几篇文章我已经对异步的操作进行的详细的解释.异步操作也是线程的一种,当我们开始一个异步操作(新线程),完成调用后需要和其他线程通信(可能需要告知状态信息),这时候我们就需要线程间的通信编程.

线程间通信

我们看下面的图

delegate void DoWork();
2 private void button1_Click(object sender, EventArgs e)
3 void OnWorkCallback(IAsyncResult asyncResult)

void DoWorkMethod()
delegate void DoWork();
2 private void button1_Click(object sender, EventArgs e)
3
void OnWorkCallback(IAsyncResult asyncResult)

void UpdateStatus(string input)

void AddValue(string input)
void DoWorkMethod()
static class Program
2 public virtual void Post(SendOrPostCallback d, object state)

public virtual void Send(SendOrPostCallback d, object state)
delegate void DoWork();
2 private void button1_Click(object sender, EventArgs e)
3 void OnWorkCallback(IAsyncResult asyncResult)
void UpdateStatus(object input,object syncContext)
void AddValue<T>(T input)
void DoWorkMethod()
static class Program
2public class MySynchronizedClass
2 {
3 private AsyncOperation operation;
4 public event EventHandler somethingHappened;
5 public MySynchronizedClass()
6 {
7 //创建AsyncOperation 对象,并把当前线程的同步上下文保持到AsyncOperation中.
8 operation = AsyncOperationManager.CreateOperation(null);
9
Thread workerThread = new Thread(new ThreadStart(DoWork));
workerThread.Start();
}

private void DoWork()
{
SendOrPostCallback callback = new SendOrPostCallback(state =>
{
EventHandler handler = somethingHappened;

if (handler != null)
{
handler(this, EventArgs.Empty);
}
});

operation.Post(callback, null);
//注意1
operation.OperationCompleted();
}
}



代码很简单,我也不在解释,可以参照上面所有代码. 注意1:
AsyncOperation类中实现了
OperationCompleted的方法. SynchronizationContext 类中这个方法是没有具体的代码实现的.

总结:

文章中也非常适合线程的编程(除了异步)来实现通信, SynchronizationContext是最重要的一个,其他的扩展类,如SynchronizationContextSwitcher 等更高级的主题,具体可参考下面的链接. 在Winform中有个非常重要的
BackgroundWorker 类,关于
BackgroundWorker的文章很多,在此不做解释了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: