0

我有一个文本框,它告诉正在运行的应用程序的状态(比如说记事本)。如果记事本正在运行 TextBox 的文本正在运行,其他情况下不运行。

public string ProcessStatus
{
    get 
    {
         IsProcessRunning("Notepad.exe")
              return "Running";
         return "Not Running";
    }
}

现在的问题是视图在启动时只更新一次。那时,如果记事本正在运行,它可以正常工作。现在假设我运行了我的应用程序并且记事本没有运行,然后 TextBox 说没有运行。现在我启动记事本,现在应用程序仍然说没有运行,因为应用程序没有更新视图。如果我为 TextBox 调用属性更改事件的通知,那么它会说正在运行。但我想要的是 TextBox 自动更新。

我现在想到的唯一解决方案是我启动一个不断更新的后台进程ProcessStatus。但这是正确的方法吗?有没有更好的办法?像 DirectoryWatcher 这样的进程?

4

3 回答 3

2

您可以使用 aSystem.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 类页面中找到有关DispatcherTimer该类的更多信息。

于 2013-09-11T09:31:50.790 回答
0

为什么不使用定时器类定期运行ProcessStatus,可以定义间隔。

于 2013-09-11T09:33:50.810 回答
0

在另一个问题上,我可以在某些进程开始时得到通知吗?关于如何在进程(例如 Notepad.exe)启动时获得通知有两个答案。两者都不理想也不简单,我可能会按照 Sheridan 和 NSmeef 的建议坚持投票。

于 2013-09-11T09:39:20.833 回答