c#winform原子操作

时间:2013-11-13 07:11:59

标签: c# winforms atomicity

我是 C#编程的新手,我正在处理这样的场景:

我有一个Winform,其中WndProc方法被覆盖为:

  protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);
        if (m.Msg == USBNotification.WmDevicechange)
        {
            switch ((int)m.WParam)
            {
                case DEVICE_REMOVE:
                    DEV_BROADCAST_VOLUME vol =(DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME));

                    Usb_DeviceRemoved(); 
                    break;
                case DEVICE_ADDITION:
                    DEV_BROADCAST_VOLUME vol2 = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME));

                    Usb_DeviceAdded(); 
                    break;
            }
        }
    }

所以基本上我的表单是获取设备添加和删除的通知

在" Usb_DeviceRemoved()" ,我检查我的相关设备是否被删除(WMI查询)并运行一些代码(基本上在设备不再存在的代码中设置一些变量)。

同样在" Usb_DeviceAdded()" ,我检查是否添加了我的相关设备(WMI查询)并激活该设备(某些代码)。

问题: 让我们说USB设备被删除了" Usb_DeviceRemoved()"被称为,现在执行" Usb_DeviceRemoved()" USB设备已连接,执行将跳转到" Usb_DeviceAdded()"。 但我想" Usb_DeviceRemoved()"一次性执行。

P.S:我的winform在主线程(STA)中运行,我希望一切都在同一个线程中完成

无论如何都要运行" Usb_DeviceRemoved()"和" Usb_DeviceAdded()"原子

0 个答案:

没有答案