【发布时间】:2012-02-05 01:25:27
【问题描述】:
我一定是做错了什么,但我想不通。我有一个表格,我在 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 无论如何都不会改变。
我不确定我做错了什么。我确信这与如何处理计时器事件有关,但我不确定我应该做什么。有什么想法吗?
【问题讨论】: