gpt4 book ai didi

.net - 如何确定是否需要分派(dispatch)到 WinRT/Metro 中的 UI 线程?

转载 作者:行者123 更新时间:2023-12-04 13:11:56 26 4
gpt4 key购买 nike

在 .NET 中,您有 System.Threading.Thread.IsBackground .

WinRT/Metro 中是否有类似的功能?

我有一个更改 UI 属性的方法,我想确定是否需要将执行分派(dispatch)到 UI 线程运行时。

最佳答案

好吧,如果你使用 MVVM Light Toolkit 在您的应用程序中,您可以使用 CheckBeginInvokeOnUI(操作 Action ) 的方法| GalaSoft.MvvmLight.Threading.DispatcherHelper 自动处理这种情况的类。

GalaSoft.MvvmLight.Threading.DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
Gui.Property = SomeNewValue;
});

编辑:

以下代码基于 调度助手 MVVM 轻量级工具包 - link

但是,如果您不想使用 MVVM Light(顺便说一句,这很酷),您可以尝试这样的事情(抱歉,无法检查这是否有效,没有 Windows 8):
var dispatcher = Window.Current.Dispatcher;

if (dispatcher.HasThreadAccess)
UIUpdateMethod();
else dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => UIUpdateMethod(););

将此逻辑放在单独的类中会更好,如下所示:
using System;
using Windows.UI.Core;
using Windows.UI.Xaml;

namespace MyProject.Threading
{
public static class DispatcherHelper
{
public static CoreDispatcher UIDispatcher { get; private set; }

public static void CheckBeginInvokeOnUI(Action action)
{
if (UIDispatcher.HasThreadAccess)
action();
else UIDispatcher.RunAsync(CoreDispatcherPriority.Normal,
() => action());
}

static DispatcherHelper()
{
if (UIDispatcher != null)
return;
else UIDispatcher = Window.Current.Dispatcher;
}
}
}

然后你可以像这样使用它:
DispatherHelper.CheckBeginInvokeOnUI(() => UIUpdateMethod());

关于.net - 如何确定是否需要分派(dispatch)到 WinRT/Metro 中的 UI 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11983929/

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