在尝试使用相同类型硬件的多个USB midi设备时,我面临着设备命名的模糊行为.由于这可能是硬件/系统/驱动程序相关,这是我的一般设置:
这两个设备(相同的硬件,我们称之为设备X和Y)闪存有两种不同的固件风格,因此它们在midi枚举中显示不同的名称.如果我只连接设备X它将自己显示为"Brain2"/如果我只连接设备Y它是"Brain2B".这些是我从MIDIINCAPS/MIDIOUTCAPS(winmm.dll)获得的名称.到现在为止还挺好.
当我同时连接两个设备时,问题就出现了,而不是两个设备都得到相同的名称(后者连接) - 因此枚举会发生变化:
但是,我可以访问和使用这些设备,但我不能再区分它们(这与两个设备上具有相同固件的起始位置基本相同).
如果有人能指出我正确的方向,我会很高兴.有没有人遇到类似的东西?这可能是系统相关的问题吗?(或者它是一个坏司机,也许?)提前谢谢!
编辑:
我用工具调用USB设备树查看器(类似于USBView)仔细查看了usb属性,结果发现标识符在那里是正确的.那么,winmm.dll如何获得midi枚举 - 它可能是一个错误吗?(不太可能)
莫里茨
(顺便说一句:这是制造商论坛中的相关主题/帖子:链接)
想象一下节点网络(更新:'节点网络'意味着同一应用程序域中的对象,而不是独立应用程序的网络)将对象相互传递(并对它们进行一些处理).C#中是否存在用于将对象的访问限制为仅实际处理它的节点的模式?
主要动机:确保线程安全(无并发访问)和对象一致性(关于存储在其中的数据).
V1:我想到这样的事情:
class TransferredObject
{
public class AuthLock
{
public bool AllowOwnerChange { get; private set; }
public void Unlock() { AllowOwnerChange = true; }
}
private AuthLock currentOwner;
public AuthLock Own()
{
if (currentOwner != null && !currentOwner.AllowOwnerChange)
throw new Exception("Cannot change owner, current lock is not released.");
return currentOwner = new AuthLock();
}
public void DoSomething(AuthLock authentification)
{
if (currentOwner != authentification)
throw new Exception("Don't you dare!");
// be sure, that this is only …Run Code Online (Sandbox Code Playgroud)