【发布时间】: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