そのため、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
とにかく、プログラムが終了する前にandwatcheradd
ループを停止して、停止コードによる例外を防ぐことができるのではないかと思っていました:
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();
これは正しい構文や方法ではありません。結果は、上記のループを安全に停止し、プログラムが例外なく終了できるようにする必要があります。