Walther MFS100检查扫描仪检测到CallbackOnCollectedDelegate

问题描述:

我正在尝试编程一个Walther Mfs100接口检查扫描仪,但在扫描后我得到“CallbackOnCollectedDelegate was detected”错误。我怎样才能解决这个问题。我.NET 2.0中使用与C#Walther MFS100检查扫描仪检测到CallbackOnCollectedDelegate

[DllImport("mflib.dll.stdcall")] 
     public static extern int mfScanFeeder(int mode, int font, int timeout); 

retval = modMFS100.mfScanFeeder(0, 2,5000); 

这不是这个特定的API调用是问题的根源。这个API太模糊而且记录太差,无法给出直接的答案,但是请查找一个初始化样式函数,让您设置回调。该回调是异常的原因。您必须创建一个委托对象并将其存储在类的一个字段中。这样垃圾收集器就会看到它的引用,并且不会垃圾收集它。

代替

因此,:

void SetupScanner() { 
    mfInitialize(something, myCallback); 
} 

做这样的:

SomeDelegateType callback; 

void SetupScanner() { 
    callback = new SomeDelegateType(myCallback); 
    mfInitialize(something, callback); 
} 

联系供应商的支持,如果这没有帮助。

下面是关于此错误的信息:
http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/665b876d-9070-41de-9a3a-d2093895d0c2

你可以尝试使用静态变量的代表,这将防止垃圾回收委托。

+0

你,先生,真棒! @rotman值得一枚奖章!静态为我解决了同样的问题。 – DomenicDatti 2013-09-25 04:11:46