正常处理多线程时Presenter接收事件,调用View更新对应控件。
主持人:
private void EventAggregator_InfoUpdated(object sender, InfoUpdatedEventArgs e)
{
view.UpdateFeedInfo(e.FeedInfo);
}
查看:
public void UpdateFeedInfo(FeedInfo feedInfo)
{
if (!control.IsHandleCreated && !control.IsDisposed) return;
control.BeginInvoke((MethodInvoker) (() => control.Update(feedInfo)));
}
我的问题是如何在调用 View 之前在 GUI 线程中调用演示器中的方法调用。像这样的东西:
private void EventAggregator_InfoUpdated(object sender, InfoUpdatedEventArgs e)
{
//InvokeInUiThread// ManageInfoInput(e.FeedInfo);
}
private void ManageInfoInput(FeedInfo feedInfo)
{
...
view.UpdateFeedInfo(e.FeedInfo);
}
最佳答案
我将修改 Wiktor idea,使用 View 在 UI 线程中调用 Presenter 代码。
查看界面:
public interface IView
{
IAsyncResult BeginInvoke(Delegate method);
object Invoke(Delegate method);
}
主持人:
private void EventAggregator_InfoUpdated(object sender, InfoUpdatedEventArgs e)
{
view.Invoke(new Action(() => ManageInfoInput(e.FeedInfo)));
}
private void ManageInfoInput(FeedInfo feedInfo)
{
...
view.UpdateFeedInfo(feedInfo);
}
这样我们就不会在 View 中放置任何代码。
关于c# - 更新演示者对多线程事件、MVP、Winforms 的看法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17534249/