我有一个TextBox,它告诉正在运行的应用程序的状态(比如记事本)。如果记事本正在运行TextBox正在运行,而不是针对其他情况运行。
public string ProcessStatus
{
get
{
IsProcessRunning("Notepad.exe")
return "Running";
return "Not Running";
}
}
现在问题是视图在启动时只更新一次。那时如果记事本正在运行它可以正常工作。现在让我们假设我运行了我的应用程序而记事本没有运行,然后TextBox说没有运行。现在我启动记事本,现在应用程序仍然说没有运行,因为应用程序没有更新视图。如果我为TextBox调用属性更改事件的通知,那么它将说运行。但我想在这里是TextBox自动更新。
我现在正在考虑的唯一解决方案是,我开始一个后续流程,不断更新ProcessStatus
。但这是正确的方法吗?有没有更好的方法?像DirectoryWatcher那样的流程?
答案 0 :(得分:2)
您可以定期使用System.Windows.Threading.DispatcherTimer
进行检查:
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(10000); // checks every 10 seconds
timer.Tick += Timer_Tick;
timer.Start();
...
private void Timer_Tick(object sender, EventArgs e)
{
// do your checks here
textbox.Text = ProcessStatus;
}
您可以在MSDN的DispatcherTimer Class页面上找到有关DispatcherTimer
课程的更多信息。
答案 1 :(得分:0)
为什么不使用timer类定期运行ProcessStatus,可以定义间隔。
答案 2 :(得分:0)
在另一个问题Can I Get Notified When Some Process Starts?上,如果一个进程(例如Notepad.exe)启动,有两个答案可以获得通知。两者既不理想也不简单,我可能会像Sheridan和NSmeef所建议的那样坚持投票。