gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:05:49 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com