Nil*_*zor 6 .net microsoft-metro windows-runtime
在.NET中你有System.Threading.Thread.IsBackground.
在WinRT/Metro中是否有相同的功能?
我有一个更改UI属性的方法,我想确定是否需要将执行分派给UI线程运行时.
Ole*_*leg 16
好吧,如果你在你的应用程序中使用MVVM Light Toolkit,你可以使用GalaSoft.MvvmLight.Threading.DispatcherHelper类的CheckBeginInvokeOnUI(Action action)方法自动处理这种情况.
GalaSoft.MvvmLight.Threading.DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
Gui.Property = SomeNewValue;
});
Run Code Online (Sandbox Code Playgroud)
编辑:
以下代码基于DispatcherHelper类的MVVM Light Toolkit - link
但是如果你不想使用MVVM Light(顺便说一下这很酷),你可以试试这样的东西(抱歉,无法检查这是否有效,没有Windows 8):
var dispatcher = Window.Current.Dispatcher;
if (dispatcher.HasThreadAccess)
UIUpdateMethod();
else dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => UIUpdateMethod(););
Run Code Online (Sandbox Code Playgroud)
将这个逻辑放在单独的类中会更好:
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后你就可以使用它:
DispatherHelper.CheckBeginInvokeOnUI(() => UIUpdateMethod());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5446 次 |
| 最近记录: |