Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF仅在用户操作之间将数据绑定到datagrid。如何强制更新到datagrid?_C#_Wpf_Datagrid - Fatal编程技术网

C# WPF仅在用户操作之间将数据绑定到datagrid。如何强制更新到datagrid?

C# WPF仅在用户操作之间将数据绑定到datagrid。如何强制更新到datagrid?,c#,wpf,datagrid,C#,Wpf,Datagrid,用户可以执行一个操作,我将数据添加到绑定到DataGrid的集合中,该集合工作正常 但是,当有一个长时间运行的进程将多个记录添加到集合中时,在进程结束之前,我从未看到数据网格被更新。我做错了什么?我真的是新手,所以我相信问题很简单 private ObservableCollection<StatusEntry> _collSe = new ObservableCollection<StatusEntry>(); public ObservableColle

用户可以执行一个操作,我将数据添加到绑定到DataGrid的集合中,该集合工作正常

但是,当有一个长时间运行的进程将多个记录添加到集合中时,在进程结束之前,我从未看到数据网格被更新。我做错了什么?我真的是新手,所以我相信问题很简单

   private ObservableCollection<StatusEntry> _collSe = new ObservableCollection<StatusEntry>();
    public ObservableCollection<StatusEntry> CollSe
    {
        get { return _collSe; }
        set
        {
            _collSe = value;
           // NotifyPropertyChanged("CollSe");
        }
    }

  CollSe.Add(new StatusEntry() { TimeStamp = DateTime.Now, Comment = "STARTED: Translating file to DataTable" });
                DataTable dt = ExcelHelper.ReadAsDataTable(tbFileName.Text);
                CollSe.Add(new StatusEntry() { TimeStamp = DateTime.Now, Comment = "COMPLETE: Translating file to DataTable" });
编辑:

更清楚的是,这就是我所尝试的。。但直到最后,仍然不会更新UI

  private void btnProcessFile_Click(object sender, RoutedEventArgs e)
    {
        //THis should happen as soon as the button is pressed
        ThreadStart job = new ThreadStart(() =>
        {
            for (int i = 0; i < 20; i++)
            {
                // The new thread puts UI operations in the dispatching queue
                Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() =>
                {
                    CollSe.Add(new StatusEntry() { TimeStamp = DateTime.Now, Comment = "Happy Tools STARTED" });
                }));
            }
        });

        Thread thread = new Thread(job);
        thread.Start();



        //The another minute of processing here.....

我犯了一个错误,没有理解基本知识就提出问题,因此到处编码,不知道我在做什么。所以我想我现在明白了。这篇文章帮助我的头脑明白了这一点

主要的一点是要理解WPF有一个主线程和一个UI线程,以及如何从一个线程转到另一个线程以允许访问UI


嗯,就是这样。在集合更新之前,UI不会反映它。它是在同一个线程上吗?我认为这与线程与UI线程有关?不仅仅是数据网格。。它是任何图形用户界面。。在控件返回给用户之前,不会更新任何集合。当我执行.add时,集合会更新,对吗?我只是在等待绑定到该集合的UI恢复happen@punkouter当你的帖子上有超过一个人的评论时,你应该使用通知他们你的新评论,因为他们不会收到任何通知,而且不是每个人都会继续对之前评论过的问题进行投票。