Я должен делать что-то совершенно неправильно, но я не могу понять это. У меня есть форма, и я добавляю в VS таймер. У меня также есть класс, который следит за запуском приложения (notepad.exe). Когда событие приходит, предполагается включить таймер, установить интервал и на каждом тике что-то делать (например, запустить окно сообщения или изменить метку). Кажется, этого не происходит. Взгляните на код, чтобы помочь кому-нибудь дать мне ключ. Код ниже:
public partial class Monitor : Form
{
EventWatcher eventWatch = new EventWatcher();
ManagementEventWatcher startWatcher = new ManagementEventWatcher();
ManagementEventWatcher endWatcher = new ManagementEventWatcher();
public Monitor()
{
InitializeComponent();
startWatcher = eventWatch.WatchForProcessStart("notepad.exe");
endWatcher = eventWatch.WatchForProcessEnd("notepad.exe");
}
private void appTimer_Tick(object sender, EventArgs e)
{
label1.Text = "tick";
MessageBox.Show("Tick");
}
}
И класс наблюдателя
class EventWatcher
{
public ManagementEventWatcher WatchForProcessStart(string processName)
{
string queryString =
"SELECT TargetInstance" +
" FROM __InstanceCreationEvent " +
"WITHIN 2 " +
" WHERE TargetInstance ISA 'Win32_Process' " +
" AND TargetInstance.Name = '" + processName + "'";
// The dot in the scope means use the current machine
string scope = @"\\.\root\CIMV2";
// Create a watcher and listen for events
ManagementEventWatcher watcher = new ManagementEventWatcher(scope, queryString);
watcher.EventArrived += ProcessStarted;
watcher.Start();
return watcher;
}
public void ProcessStarted(object sender, EventArrivedEventArgs e)
{
Monitor monitor = new Monitor();
//set timer interval and start time for Monitor class. (form)
monitor.appTimer.Interval = 5000;
monitor.appTimer.Enabled = true;
MessageBox.Show("notepad started");
}
}
Я заметил две вещи:
Когда notepad.exe запускается, и я закомментировал строку MessageBox.Show("notpad started");
, сообщение в событии тика таймера не сработает. Если это так, как показано выше, оно покажет мне оба окна сообщений (блокнот запущен и установлен). Однако label1.Text
не изменится ни на что.
Я не уверен, что я делаю неправильно. Я уверен, что это как-то связано с обработкой события таймера, но я не уверен, что мне следует делать. Любые идеи?