在构建我们称之为PWTests的测试项目时,我收到了这个警告.
警告CS1684:对类型'System.Windows.Input.ICommand'的引用声称它在'c:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.dll'中定义,但它无法找到
这个项目应该测试一个我们称之为PW的类库.我无法确定为什么它认为System.Windows.Input.ICommand是在System.dll中定义的.实际定义了ICommand的PresentationCore在测试项目和类库项目中被正确引用.我已经尝试删除对PresentationCore的引用,清理并重新添加它(如其他问题中所述),但这些引用不起作用.
我怎样才能确定是什么导致它认为ICommand在System.dll中?
我有这段代码:
var searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_DiskDrive");
foreach (var queryObj in searcher.Get().Cast<ManagementObject>()) //Error points to this line
Run Code Online (Sandbox Code Playgroud)
基本上这段代码的作用是,它遍历连接的设备列表,并查看我想要的设备是否已连接。如果我在运行代码时设备已经连接的情况下运行此代码,则它可以完美运行。但是,如果我用 DBT_DEVICEARRIVAL 触发此代码(这是系统在连接某些设备时发送的事件,我用
private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if(..DBT_DEVICEARRIVAL..)
new ScanDevices(); /*Here lies the code from above (in the class)*/
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
由于应用程序正在调度输入同步调用,因此无法进行传出调用。(来自 HRESULT 的异常:0x8001010D (RPC_E_CANTCALLOUT_ININPUTSYNCCALL))。
如果我把 thread.sleep(5000) 放在上面的代码之上,所以它在执行前等待 5 秒,那么代码就可以工作了。所以冲突一定在某个地方,其他东西首先尝试访问该设备并为自己占据所有。
我在互联网上搜索并找到了一些建议,例如向自己发送自定义 postmessage 以触发代码,但我不知道如何做到这一点,甚至不知道如何解决问题。
这里最好的解决方案是什么?