【问题标题】:WPF and cross thread operationsWPF 和跨线程操作
【发布时间】:2016-01-26 19:39:34
【问题描述】:

我有一个小型 WPF 应用程序,我在其中模拟传感器检测到的运动。我假装该运动在 1 分钟后发生,并在 2 分钟后停止。以下是我的代码:

 public event Action OnMotionDetected;
        public event Action OnMotionReset;
        private DateTime startTime = DateTime.Now;

        public MotionDetectionService()
        {
            startTime = DateTime.Now;
            System.Threading.Thread mockThread = new System.Threading.Thread(new System.Threading.ThreadStart(StartMock));
            mockThread.Start();
        }

     private void StartMock()
            {
                while (DateTime.Now < startTime.AddMinutes(1))
                {
                    System.Threading.Thread.Sleep(1000);
                    Console.WriteLine("Remaining: " + (startTime.AddMinutes(1) - DateTime.Now).ToString());
                }
                FireMoveEvent();
                while (DateTime.Now < startTime.AddMinutes(2))
                {
                    System.Threading.Thread.Sleep(1000);
                    Console.WriteLine("Remaining: " + (startTime.AddMinutes(2) - DateTime.Now).ToString());
                }
                FireMoveEvent();
            }

            private void FireMoveEvent()
            {
                if(OnMotionDetected != null)
                {
                    OnMotionDetected();
                }
            }

            private void FireResetEvent()
            {
                if (OnMotionReset != null)
                {
                    OnMotionReset();
                }
            }

当线程触发事件时,我的 UI 更新,但它说它无法更新,因为 UI 元素是在另一个线程上生成的。

关于如何解决的任何想法?

【问题讨论】:

    标签: wpf user-interface multithreading


    【解决方案1】:

    您可以使用Dispatcher.Invoke() 编组到 UI 线程。

    请看:Making sure OnPropertyChanged() is called on UI thread in MVVM WPF app

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 2011-07-11
      • 1970-01-01
      相关资源
      最近更新 更多