【发布时间】:2015-05-03 21:28:54
【问题描述】:
所以我有一些代码可以检查插件和 USB 设备的删除。
public void Main_Shown(object sender, EventArgs e)
{
var watcheradd = new ManagementEventWatcher();
var queryadd = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2");
watcheradd.EventArrived += new EventArrivedEventHandler(watcher_deviceadded);
watcheradd.Query = queryadd;
watcheradd.Start();
var watcherremove = new ManagementEventWatcher();
var queryremove = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 3");
watcherremove.EventArrived += new EventArrivedEventHandler(watcher_deviceremoved);
watcherremove.Query = queryremove;
watcherremove.Start();
}
我想知道在我的程序退出之前我是否可以停止 watchremove 和 watcheradd 循环,以防止通过内的停止代码出现异常:
private void Exit_Main(object sender, EventArgs e)
{
Process p = new System.Diagnostics.Process();
ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo();
si.RedirectStandardInput = false;
si.CreateNoWindow = true;
si.UseShellExecute = false;
si.FileName = "adb.exe";
si.Arguments = "kill-server";
p = Process.Start(si);
p.WaitForExit();
Application.Exit();
//EXIT APPLICATION!!!
}
Main_Shown.deviceadd.Stop(); 不是正确的语法或方法。
结果应该安全地停止上述循环,然后让程序无异常退出。
【问题讨论】:
-
为什么 Stop 不正确?你的意思是拦截关闭应用程序事件?你能澄清一下吗?
-
因为它在不同的方法中运行,所以它不起作用。我编辑了原始代码以反映这一点。
-
如果要调用 Stop() 方法,那么 watcheradd 和 watcherremove 不能是局部变量。使它们成为类的字段。
-
只是为了澄清一些事情。我会使用
{}来封装 watcheradd 和 watcherremove 然后我可以在其他地方调用它吗?或者它是否需要更多。文章链接MSDN Article
标签: c# loops managementeventwatcher