public const int WM_DEVICECHANGE = 0x219; public const int DBT_DEVICEARRIVAL = 0x8000; public const int DBT_DEVICEREMOVECOMPLETE = 0x8004; protected override void WndProc(ref Message m) { try { if (m.Msg == WM_DEVICECHANGE) { switch (m.WParam.ToInt32()) { // USB插上 case DBT_DEVICEARRIVAL: if (!IsCopy) // 如果不用这个判断,会被多次调用,原因不明 { IsCopy = true; // 其他处理 } break; // USB移除 case DBT_DEVICEREMOVECOMPLETE: IsCopy = false; break; default: break; } } } catch (Exception ex) { Log.Debug(ex.Message); } base.WndProc(ref m); } form.hide() 后,仍然起作用。 form.Dispose()后,不起失效。