从UI线程运行线程而不阻止UI线程

时间:2014-08-07 09:34:31

标签: c# multithreading .net-4.0 ui-thread

我的viewmodel中有一个布尔属性,它绑定到我视图中的属性。当此属性更改为true时,我想在不阻止UI线程的情况下进行服务调用,因此我的视图可以继续工作。 到目前为止,我有:

    private bool _isLoadingAnimationVisible = true;
    public bool IsLoadingAnimationVisible
    {
        get { return _isLoadingAnimationVisible; }
        set
        {
            _isLoadingAnimationVisible = value;
            if (IsLoadingAnimationVisible)
            {
                Task t = new Task(() => { LoadStuff(SelectedSomething.Id, SelectedDate, false); });
                t.Start();
            }
            RaisePropertyChanged("IsLoadingAnimationVisible");
        }
    }

我不认为LoadStuff方法很重要但是这个任务目前正在阻止我的UI线程。我想知道是否有办法在保持UI线程空闲的同时执行线程t。

2 个答案:

答案 0 :(得分:0)

你可以做到

if (IsLoadingAnimationVisible)
{
    new Thread(delegate() {
                           LoadStuff(SelectedSomething.Id, SelectedDate, false);
                          }).Start();
}

确保您没有从LoadStuff更新用户界面。

答案 1 :(得分:0)

尝试:

await Task.Factory.StartNew<bool>(()=>{get the bool})

您需要等待任务才能使其异步。工厂是一个干净的方式。