我在winforms应用程序中使用MVC模式。我需要异步调用远程服务。因此,在View中的某些事件中,我调用相应的Presenter方法。在Presenter中,我调用了BeginInvoke服务方法。但是要查看必须仅在主线程中更新。我可以实际上将CallBack指向View中的某个函数,并更新它的控件状态,但这与MVP模式冲突--View不能对它携带的数据负责。此回调函数必须位于Presenter中。但是如何在主线程中调用View?
答案 0 :(得分:0)
您是否通过View假设您的表单?如果是,你可以调用yourForm.Invoke(把委托放在这里); ,这将在主线程中调用委托。但是你为什么要在主线程中执行呢?为什么不能在回调线程中执行?
答案 1 :(得分:0)
将回调函数放入演示者。让演示者调用视图上的任何更新功能/让视图观察演示者的状态并处理“已完成”事件。在视图的函数中,如果视图是由Windows窗体实现的,请测试InvokeRequired
属性以查看调用是否已进入Windows线程。如果没有,则使用Invoke
来调用它。
private void SetMessage(string message)
{
if (InvokeRequired)
{
BeginInvoke(new Action(() => SetMessage(message)));
return;
}
button1.Text = message;
}