调度程序未调度

本文关键字:调度 调度程序 | 更新日期: 2023-09-27 18:18:02

我想测试一些东西,所以我建立了一个小视图&一个带有按钮和列表框的视图模型。当我单击按钮时,我运行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");
    }
}

任何想法都会很棒

谢谢

调度程序未调度

调度员。获取线程的分派器当前正在执行并创建一个新的Dispatcher(如果还没有)与线程关联。

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