2013-09-11 6 views
0

У меня есть TextBox, который сообщает статус запущенного приложения (скажем, блокнот). Если работает блокнот Text of TextBox работает и не работает для другого случая.Update View автоматически

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

Теперь проблема в том, что просмотр обновляется только один раз при запуске. В то время, если блокнот работает, он работает нормально. Теперь давайте предположим, что я запустил приложение, и блокнот не был запущен, но TextBox говорит, что он не работает. Теперь я запускаю блокнот, теперь приложение все еще говорит, что не работает, поскольку приложение не обновило представление. Если я вызываю уведомление об измененном событии свойства для TextBox, тогда он скажет, что он работает. Но я хочу, чтобы TextBox обновлялся автоматически.

Единственное решение, о котором я сейчас думаю, это то, что я запускаю фоновый процесс, который продолжает обновляться ProcessStatus. Но правильно ли это? Есть ли лучший способ? Что-то вроде DirectoryWatcher для процессов?

+0

Я думаю, что виновником является код вызова. Поток пользовательского интерфейса, вероятно, заблокирован вашим механизмом опроса или чем-то еще. –

+0

http://stackoverflow.com/questions/8455873/how-to-detect-a-process-start-end-using-c-sharp-in-windows и http://stackoverflow.com/questions/1986249/c -sharp-процесс-монитор –

ответ

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; 
} 

Вы можете узнать больше о DispatcherTimer класса от DispatcherTimer Class страницы на сайте MSDN.

0

Почему бы не использовать класс таймера для периодического запуска ProcessStatus, вы можете определить интервал.

0

В этом другом вопросе Can I Get Notified When Some Process Starts? есть два ответа о том, как вы можете получить уведомление о запуске процесса (например, Notepad.exe). Оба они не идеальны и не просты, я бы, вероятно, придерживался опроса, как предложил Шеридан и Нсмиф.