小编Rob*_*b K的帖子

"警告CS1684:引用类型X声称它在...中定义但无法找到它"

在构建我们称之为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中?

.net c# .net-4.0 visual-studio-2010

9
推荐指数
1
解决办法
9650
查看次数

RPC_E_CANTCALLOUT_ININPUTSYNCCALL 尝试访问 USB 设备时

我有这段代码:

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 以触发代码,但我不知道如何做到这一点,甚至不知道如何解决问题。

这里最好的解决方案是什么?

c# windows exception

2
推荐指数
1
解决办法
3546
查看次数

标签 统计

c# ×2

.net ×1

.net-4.0 ×1

exception ×1

visual-studio-2010 ×1

windows ×1