【发布时间】:2011-12-18 05:34:02
【问题描述】:
我正在尝试创建 Kinect + WPF 应用程序。 Kinect 部分工作正常;现在我想创建一个方法来检查页面是否空闲(没有用户在特定时间内与程序交互)。如果闲置 5 秒,屏幕将被锁定。这是算法:
- 启动线程(我需要使用 Dispatcher,因为线程需要修改 WPF 元素)
- 检查用户是否正在使用。如果不是,则将 Count 增加 1。
- 如果 Count == 9(这意味着已经过了 5 秒),锁定屏幕并再次将 Count 设置为 0。
- 休眠 500 毫秒。
- 重复步骤 2-4
这是我的代码。应用程序启动时调用方法“startLockHandler”。
public void startLockHandler()
{
Application.Current.Dispatcher.BeginInvoke(new ThreadStart(() => lockHandler()), null);
}
public void lockHandler()
{
while (true)
{
if (myState.isSkeletonTracked == false) //if skeleton is no longer tracked
{
if (myState.ActionAllowed == true) //if the page is not in transition
{
lockCount++;
if (lockCount >= 10)
{
lockCount = 0;
myState.ActionAllowed = false;
//LOCKING MECHANISM INSERTED HERE. NEED TO MODIFY SOME WPF ELEMENTS
myState.ActionAllowed = true;
}
}
}
else
{
lockCount = 0;
}
Console.WriteLine("lockHandler: THREAD SLEEP CALLED");
Thread.Sleep ( 500 );
}//end while
}//end method lockHandler
当我运行应用程序时,应用程序在启动后立即挂起。我认为发生的是 Thread.Sleep (500) 指示主线程进入睡眠状态(如果我错了,请纠正我)。我的问题是如何指定要让哪个线程进入睡眠状态? 顺便说一句,我不是 C# 方面的专家,也不是线程方面的新手 :(
感谢您的关注,希望您能帮助我:)
【问题讨论】:
-
在生产代码中休眠通常是个坏主意(tm)
-
我想不出任何其他解决方案..
-
为什么不使用
Timer而不是Thread.Sleep?
标签: c# wpf multithreading dispatcher