简体   繁体   中英

On button end running methods in different method

So I have some code which checks for the plugin and removal of a USB device.

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();   
}

I was wondering is there anyway I can stop the watchremove and watcheradd loops before my program exits to prevent an exception by the stop code within:

     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!!!            
    }

as Main_Shown.deviceadd.Stop(); isn't the correct syntax or way of doing this. The result should safely stop the above loops and then allow the program to exit without an exception.

Got a solution. So I needed to add

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

above the class and that set the classes to global. So now it exits without a problem using the code below.

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

Thanks everyone for your help.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM