检查异步呼叫是否已完成?

时间:2014-09-19 21:24:49

标签: c# .net winforms asynchronous .net-3.5

我有两个课程ViewPresenter

class Presenter 
{ 
    View _view;

    void OnViewLoad(object sender, EventArgs e)
    {
        _view.UpdateUIAsync();
        // need to
        // _view.UpdateUIAsync().then(....)
    }

现在我希望方法OnViewLoad_view.UpdateUIAsync()完成后执行一些代码。现在我的解决方案是修改View.UpdateUIAsync()以接受操作参数_view.UpdateUIAsync(Action<object> after)并让View在异步代码完成后执行它。像承诺模式这样做更好的方式吗?

View是Winform表单,使用BackgroundWorker进行异步,因为它使用.Net 3.5。

1 个答案:

答案 0 :(得分:0)

如果您可以升级到.Net的更高版本,则可以从UpdateUIAsync返回任务

.Net 4.5。

await _view.UpdateUIAsync() // .Net 4.5
// statement after 

.Net 4

_view.UpdateUIAsync().ContinueWith(...) // .Net 4.0

如果你无法升级我猜你必须坚持使用回调(就像你有的那样)或者添加一个在操作完成时触发的事件。