自动更新视图

时间:2013-09-11 09:26:51

标签: c# wpf mvvm process

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

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

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

我现在正在考虑的唯一解决方案是,我开始一个后续流程,不断更新ProcessStatus。但这是正确的方法吗?有没有更好的方法?像DirectoryWatcher那样的流程?

3 个答案:

答案 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所建议的那样坚持投票。