2

我想测试一些东西,所以我用一个按钮和一个列表框构建了一个小的视图和视图模型。当我单击按钮时,我运行 RunCommand,如下面的代码所示。我不明白为什么 Dispatcher 不触发我希望它运行的操作。

这是视图模型代码:

public class ViewModel
{
    private ObservableCollection<string> _items = new ObservableCollection<string>();
    private ICommand _runCommand;

    public ICommand RunCommand { get { return _runCommand ?? (_runCommand = new ActionCommand(RunCommandAction)); } }

    private void RunCommandAction()
    {
        Task.Factory.StartNew(() =>
        {
            if (Thread.CurrentThread == EnvironmentData.UIThread)
                _items.Add("Eldad");
            else
                Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() => _items.Add("Eldad")));
        });
    }

    public IEnumerable<string> Items
    {
        get { return _items; }
    }

    public ViewModel()
    {
        _items.Add("Shahar");
    }
}

任何想法都会很棒

谢谢

4

1 回答 1

2

Dispatcher.CurrentDispatcher - 获取当前正在执行的线程的 Dispatcher,如果尚未与线程关联,则创建一个新的 Dispatcher。

由于您使用了 Task.Factory.StartNew 执行它的线程不是主线程。如果你想为 UI 线程使用 Dispatcher,你必须使用 App.Current.Dispatcher

于 2013-06-11T10:22:36.273 回答