我有以下方法:
protected void OnBarcodeScan(BarcodeScannerEventArgs e)
{
if (BarcodeScan != null)
{
//BarcodeScan.BeginInvoke(e, null, null);
BarcodeScan(e);
}
}
当我尝试进入上述方法时,它工作正常。我能够介入该方法的所有部分。
但是,如果我切换评论(因此BarcodeScan(e)
被注释掉并删除BarcodeScan.BeginInvoke(e, null, null)
上的评论,那么我就无法进入OnBarcodeScan方法的任何部分(即{{1}上的断点没有被击中。
我也试过在那里放一些调试语句。但只要那个开始调用调用就在那里,它就不会让我进入该方法。
我检查了输出,当我尝试介入它时说:
ScannerTest.exe中出现“System.NotSupportedException”类型的第一次机会异常 步入:踩过没有符号的方法'Symbol.Marshaller.SymbolMessageWindow.WndProc' 单步执行:单步执行没有符号的方法'Microsoft.WindowsCE.Forms.MessageWindow._WndProc'
当有一个BeginInvoke时,为什么整个方法都不能步进?
任何帮助都会很棒!
答案 0 :(得分:4)
Compact Framework不支持异步委托调用(即BeginInvoke
)。
至于调试器甚至不会破解方法的原因,我认为是因为以下原因:
BeginInvoke
/ EndInvoke
方法由C#编译器生成(它是required to do this),标记为“native”。这意味着CLR将提供实施。Delegate.BeginInvoke
,因此任何调用它的方法都不能进行JIT编译,因此无法执行。NotSupportedException
时抛出OnBarcodeScan
(并且JIT编译器尝试编译它并失败)。这就是调试器无法进入的原因。