C# 如何从UWP中的另一个运行线程调用UI线程中的方法?

C# 如何从UWP中的另一个运行线程调用UI线程中的方法?,c#,multithreading,uwp,task,C#,Multithreading,Uwp,Task,我想从线程内部调用Updateint I。我曾经使用BeginInvoke,但它在UWP中不可用 public class Viewmodel { Viewmodel() { //start task var mainTask = Task.Factory.StartNew(() => { MyThread(); }); } private void MyThread() { int i; while(condition)

我想从线程内部调用Updateint I。我曾经使用BeginInvoke,但它在UWP中不可用

public class Viewmodel
{
 Viewmodel()
 {
   //start task
   var mainTask = Task.Factory.StartNew(() =>
   {
     MyThread();
   });
 }
 private void MyThread()
 {
    int i;
    while(condition)
    {
      //do somethings
      Update(i) 
    }
 }
 private Update(int i)
 {
   //do somethings
 }
}
下面的方法应该有效

Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
    // update your UI here
    Update(i) 
});

您可以使用以下代码运行代码:

await Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.High/* the rank */,
() =>
{
    // run the code
});
我还有另一种方法

  await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal /*the rank*/, () => { // run the code  });

请参见

明确说明不要使用高值。@PeterTorr MSFT Thx,但我想说的是,您可以在此设置排名。由于最初的问题提到在视图模型类中运行,因此您可以使用此。Dispatcher。如果应用程序有多个视图,依赖MainView将导致中断。当我想调用Update时,我将在何处使用此代码,在任务内部?@AmirHusseinNargesian您可以将此放入更新函数内部,并在调度处理程序中添加您的逻辑。