c# - 更新演示者对多线程事件、MVP、Winforms 的看法

标签 c# .net winforms mvp

正常处理多线程时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/

相关文章:

c# - CA2000 方法使用 "using",但不使用 try/finally

c# - 使用 For 循环滑动对象 (C#)

c# - [DefaultValue()] 继承 ComboBox 的问题

c# - 在 winforms 应用程序中更改按钮图像大小

带有 ASP.Net Web API 的 C# Entity Framework 6 在 JSON 响应中返回空数组

c# - 如何使基础架构代码仅在命名空间中可见?

c# - 在 SQL Server 中使用带有 URL 部分的单个分层页面表组合 URL

c# - 数据不显示在数据网格中

c# - Entity Framework 7 与 ASP.NET 4.6

.net - Powershell v3 Invoke-WebRequest HTTPS 错误