自动更新视图

本文关键字:新视图 更新 | 更新日期: 2023-09-27 18:30:58

我有一个文本框,它告诉正在运行的应用程序的状态(比如记事本)。如果记事本正在运行,则文本框的文本正在运行,并且对于其他情况未运行。

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

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

我现在正在考虑的唯一解决方案是我启动一个不断更新ProcessStatus的后台进程。但这是正确的方法吗?有没有更好的方法?类似于进程的DirectoryWatcher?

自动更新视图

您可以使用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 类页找到有关DispatcherTimer类的详细信息。

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

关于另一个问题 当某些进程启动时,我会收到通知吗? 关于如何在进程(例如记事本.exe)启动时收到通知,有两个答案。两者都不理想也不简单,我可能会坚持像Sheridan和NSmeef建议的那样进行民意调查。