Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不同方法中的按钮端运行方法_C#_Loops_Managementeventwatcher - Fatal编程技术网

C# 不同方法中的按钮端运行方法

C# 不同方法中的按钮端运行方法,c#,loops,managementeventwatcher,C#,Loops,Managementeventwatcher,所以我有一些代码来检查插件和USB设备的删除 public void Main_Shown(object sender, EventArgs e) { var watcheradd = new ManagementEventWatcher(); var queryadd = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2");

所以我有一些代码来检查插件和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_.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!!`

谢谢大家的帮助。

为什么Stop不正确?您的意思是拦截关闭应用程序事件吗?你能澄清一下吗?因为它是用另一种方法运行的,所以不起作用。我编辑了原始代码以反映这一点。如果要调用Stop()方法,则watcheradd和watcherremove不能是局部变量。让它们成为类的字段。只是为了澄清一些事情。我会使用
{}
来封装watcheradd和watcherremove,然后在别处调用它吗?或者它需要从中得到更多。链接到文章