WPF 4.5:如何创建子线程并继续任务到UI主线程?

时间:2015-06-16 13:34:57

标签: c# wpf background-process caliburn.micro

我使用WPF 4.5和MVVM Caliburn Micro并具有以下WPF代码:

public class MainViewModel: Screen
{
    public MainViewModel()
    {
        if (!ConnectServer())
        {
            Console.WriteLine("Connection failed");
            return;
        }
        // Following method can only be run if server connection established
        ProcessThis();
    }
}

我上面的代码只有一次连接机会,如果失败,它会显示视图并且什么都不做。如果我使用while(!ConnectServer())它将一直阻止UI线程,意味着当连接仍然失败时,不会向用户显示任何内容。这非常难看。

我想要的是什么:

  1. 如果连接失败,则表示ConnectServer()返回false,它应该等待10秒并尝试反复连接(例如,调用方法RetryConnect())直到成功没有阻塞 UI线程。
  2. 连接后,应该继续主线程并运行ProcessThis()。
  3. 理论上我知道它需要背景分离的线程,但我不知道如何简单而好地实现它。请随意使用我的示例代码进行解释。提前谢谢。

1 个答案:

答案 0 :(得分:3)

要启动后台任务,您可以使用Task.Run方法。 要在主线程中执行代码,您可以使用页面的Dispatcher(如果是VM上下文,我已调用Application.Current.Dispatcher)

<li ng-repeat="select in Items">   
         <foo ng-repeat="newin select.values">
{{new.label}}</foo>

您可以使用新的异步/等待功能来实现它,而不是使用Dispatcher。

ng-if="select.name == '?'"