Eh, CheckBeginInvokeOnUI (Eylem eylem) otomatik olarak bu durumu ele GalaSoft.MvvmLight.Threading.DispatcherHelper sınıfının yöntemi kullanabilirsiniz.
GalaSoft.MvvmLight.Threading.DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
Gui.Property = SomeNewValue;
});
Düzenleme: Aşağıdaki kod MVVM Işığın DispatcherHelper sınıfına dayanmaktadır
Toolkit - link
Ama (bu arada göre oldukça serin bir şeydir ) MVVM Işık kullanmak istemiyorsanız, sen yok, böyle bir şey (bu çalışırsa üzgün, kontrol edemez deneyebilirsiniz Windows 8):
var dispatcher = Window.Current.Dispatcher;
if (dispatcher.HasThreadAccess)
UIUpdateMethod();
else dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => UIUpdateMethod(););
böyle ayrı sınıfta bu mantığı koymak güzel olurdu:
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;
}
}
}
Sonra hoşuna kullanabilirsiniz:
DispatherHelper.CheckBeginInvokeOnUI(() => UIUpdateMethod());
Sanırım bu işe yarıyor, ancak herhangi birinin bir üçüncü parti kitaplığı gerektirmeyen bir çözümü bilmesi güzel olurdu. – Nilzor
Yorum yazdım, bir göz atın. – Oleg
Çok teşekkürler. Window.Current.Dispatcher.HasThreadAccess bool anahtar sanırım. – Nilzor