gpt4 book ai didi

c# - 使用 Dispatcher 时代码和表示的真正分离

转载 作者:可可西里 更新时间:2023-11-01 09:10:32 26 4
gpt4 key购买 nike

在我的 WPF 中,尝试将我的类逻辑与任何接口(interface)相关数据分开,并且只提供用于绑定(bind)的 ObservableCollection 属性。

问题是,当我从其他线程访问那些绑定(bind)的 OC 时,我需要通过调度程序进行访问。结果是,每当其中一种方法尝试更新 OC 时,我都需要添加隐藏在我的类中的许多 Dispatcher.Invoke() 调用。

我怎样才能以更干净和分离的方式做到这一点,以便从我的方法中抽象出调度程序调用?

最佳答案

我没有 Elixir 。但是,如果您确定并准备好承担隐式 UI 委托(delegate)的责任,您始终可以继承 ObservableCollection,覆盖方法并将所有请求分派(dispatch)给 UI。

但是下面的代码让我害怕:

// somewhere in thread pool:
for(int i = 0; i < 1000; i++)
{
_dispatcherAwareCollection.Add(i);
}

这看起来很无辜,但在幕后它会阻止调用线程 1000 次。备选方案可能是您的特定 BulkXXX() 方法,它将延迟通知,直到所有元素都被处理。这个解决方案也不完美,因为您需要一个可以让您无缝交换集合的抽象,但是 BulkXXX() 方法是非常特定于新集合的。

关于c# - 使用 Dispatcher 时代码和表示的真正分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4955681/

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