gpt4 book ai didi

c# - WPF MVVMLight Messenger UI 线程问题

转载 作者:行者123 更新时间:2023-12-03 10:58:42 24 4
gpt4 key购买 nike

我有一个关于在 WPF (MVVM) 应用程序中使用 MVVMLight messenger 的问题。在 View 中,我有一个元素( LoadingControl ),其可见性属性通过使用自定义可见性转换器绑定(bind)到 viewmodel 属性( IsBusy )。在 View 模型中,我通过发送 MVVM 消息来更改属性值( IsBusy ):

Messenger.Default.Send(new LoadingMessage(true));

在这里,我有一个 View 模型中的方法,它被重新注册以接受 正在加载消息 消息,其中 属性变了。

这工作正常,但是在我发送此消息的 View 模型方法之一中,UI 线程 block 和 属性值更改,但我的 UI 元素的可见性 加载控制 直到主要操作未完成,例如:
void Call() {
Messenger.Default.Send(new LoadingMessage(true));

SomeServiceCall();
Navigate(); // <- this works with UI, too
} // <- this is the place when LoadingControl is shown.

我想问题是因为在 View 模型中执行不在 ui 线程上,所以我尝试直接在 中调用它调用() 方法:
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
IsBusy = true;
});

但这也行不通, 加载控制 直到方法结束才显示。由于我对多线程不太熟悉,我想这里还有其他问题。任何帮助表示赞赏。

最佳答案

Messenger 在您的线程中发送消息,因此您需要等待。我认为您需要在另一个线程中发送消息。

DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
Messenger.Default.Send(new LoadingMessage(true));
});

关于c# - WPF MVVMLight Messenger UI 线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28541794/

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