【问题标题】:How Can I refresh my Datagrid on WPF automatically for every 1 minute?如何每 1 分钟自动刷新 WPF 上的 Datagrid?
【发布时间】:2011-08-28 16:55:08
【问题描述】:

我希望能够刷新我的数据网格,因为我正在更新我的数据库数据网格上的表并希望查看网格的变化,有没有什么方法可以每 1 分钟自动更新一次数据网格?

【问题讨论】:

    标签: c# wpf datagrid refresh


    【解决方案1】:

    我最终使用了DispatcherTimer,它为我简化了一些线程问题:

        private static DispatcherTimer _dataUpdateTimer = null;
    
        private ObservableCollection<Item> _items;
    
        public ObservableCollection<Item> Items
        {
            get { return _items; }
            set
            {
                if (_items == value)
                    return;
                _items = value;
                this.OnPropertyChanged(nameof(Items));
            }
        }
    
        private void SetupDataUpdateTimer()
        {
            _dataUpdateTimer = new DispatcherTimer();
            _dataUpdateTimer.Tick += OnDataUpdateEvent;
            _dataUpdateTimer.Interval = TimeSpan.FromMilliseconds(10000);
            _dataUpdateTimer.Start();
        }
    
        private void OnDataUpdateEvent(object sender, EventArgs e)
        {
            this.Items = ... add or remove items
            // ...      
        }
    

    当我之前只使用基本的Timer 时,我收到了这个错误:

    System.InvalidOperationException
      HResult=0x80131509
      Message=The calling thread cannot access this object because a different thread owns it.
      Source=WindowsBase
      StackTrace:
       at System.Windows.Threading.Dispatcher.VerifyAccess()
       at System.Windows.DependencyObject.GetValue(DependencyProperty dp)
       at System.Windows.Controls.Primitives.Selector.get_SelectedValue()
       at ...
       at System.Timers.Timer.MyTimerCallback(Object state)
    

    【讨论】:

      【解决方案2】:

      以后您可以使用ObservableCollection 绑定网格,这样您就可以避免手动刷新。

      【讨论】:

        【解决方案3】:

        DataGrid.Items.Refresh() 将刷新项目。然后您可以使用timer 每分钟运行一次以强制刷新

        Here 是一个实现计时器以更新列表框的示例,您可以根据自己的目的进行调整。

        【讨论】:

        • Indigo Delta,谢谢你我是wpf的新手,我会研究如何使用我以前没有使用过的计时器。
        • timers 和 datagrid.items.refresh 与 WPF 无关,它是核心 .net 框架:D
        • Tks Mark 我不知道!!虽然与 wpf 相关:P
        • ` public void RefreshScreen() { System.Timers.Timer myTimer = new System.Timers.Timer(); myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Elapsed); myTimer.Interval = 1000; myTimer.Enabled = true; } public void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { DisplayInGrid(); }`
        • 我有这个异常调用线程无法访问这个对象,因为另一个线程拥有它。任何想法?!
        猜你喜欢
        • 1970-01-01
        • 2012-12-09
        • 1970-01-01
        • 2013-11-17
        • 2010-10-30
        • 1970-01-01
        • 2022-06-14
        • 2019-02-28
        • 2014-11-02
        相关资源
        最近更新 更多