у меня есть окно WPF, которое должно закрыться при запуске процесса TeamViewer.
К сожалению, мне не удается построить подходящий цикл. Можете вы помочь мне?
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Process[] pname = Process.GetProcessesByName("TeamViewer");
do
{
this.Close();
}
while (pname.Length > 0);
}
Привет АйСтеффен
Сорри, я обновил свой пост
Ваш код проверяет только один раз, если процесс запущен, внутри цикла он не проверяет. Ваш код зависнет.
Вы должны уступить, почитайте о waitforSingleObject
Сорри, а как тогда такое могло выглядеть?
Вы должны искать процесс "TeamViewer" внутри цикла, и, найдя любой его экземпляр, вы можете выйти из формы. Пример кода, который следит за экземпляром Блокнота, вы можете изменить его в соответствии со своими потребностями.
do
{
Process[] proc = Process.GetProcessesByName("notepad");
if (null != proc)
{
if (proc.Length > 0)
{
//if any notepad process is running, then exit
return;
}
}
//wait for some time, there are other efficient wait mechanisms
Thread.Sleep(500); //wait for half sec
}while(true);
В качестве альтернативы вместо Thread.Sleep вы также можете использовать Task.Delay
, см. документы MS для примеров.
Имейте в виду, что Thread.Sleep заблокирует поток пользовательского интерфейса.
Большое спасибо! Теперь мне удалось это сделать с помощью решения Ананда Совмитирана.
Покажите, что вы пробовали, чтобы кто-то мог развить это.