按钮结束方法以不同的方法运行方法



所以我有一些代码检查插件和删除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();   
}

我想知道是否在那里,我可以在程序退出之前停止watchremovewatcheradd循环以防止在:

内的停止代码中例外。
     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();不是正确的语法或这样做的方式。结果应安全地停止上述循环,然后允许程序退出而无例外。

有一个解决方案。所以我需要添加

 ManagementEventWatcher watcheradd = new ManagementEventWatcher();
    WqlEventQuery queryadd = new WqlEventQuery();
    ManagementEventWatcher watcherremove = new ManagementEventWatcher();
    WqlEventQuery queryremove = new WqlEventQuery();

上面的课程,然后将类设置为全局。因此,现在使用下面的代码就不会出现问题而退出。

`si.FileName = "adb.exe";
        si.Arguments = "kill-server";
        p = Process.Start(si);
        p.WaitForExit();
        watcherremove.Stop();
        watcheradd.Stop();
        Application.Exit();
        //EXIT APPLICATION!!`

感谢大家的帮助。

相关内容

最新更新