评估需要一个线程暂时运行.使用"监视"窗口执行评估

aba*_*hev 12 c# exception-handling thread-exceptions metatrader4

完全卡住了.我正在测试MetaTrader API并在尝试在VS 2010的立即窗口中运行方法时获取下一个错误:

mscorlib.dll中出现'System.Threading.ThreadAbortException'类型的第一次机会异常

System.Runtime.Remoting.dll中出现'System.Threading.ThreadAbortException'类型的第一次机会异常

评估需要一个线程暂时运行.使用"监视"窗口执行评估.

这是什么意思?是否会因运行时版本的差异而发生(api 2.0,app 4.0)?

Ome*_*viv 7

我相信你通过立即窗口调用的方法最终调用Debugger.NotifyOfCrossThreadDependency.此方法仅在.NET 4.0中引入,因此在使用较旧版本的运行时时,问题不会重现.这篇博文NotifyOfCrossThreadDependency详细解释了,但它的要点是它使Watch窗口显示一个刷新按钮,必须在评估发生之前按下该按钮.如果是通过即时窗口评价,不过,你得到的" 评估需要一个线程来临时运行.使用监视窗口来进行评价 "的错误.

这是一个重现此错误的示例属性:

    public int CauseError
    {
        get 
        {                
            Debugger.NotifyOfCrossThreadDependency();
            return 5;
        }
    }
Run Code Online (Sandbox Code Playgroud)


Mik*_*ron 6

我相信错误意味着您尝试执行的方法正在产生一个线程.但是,由于程序处于Break模式,因此无法运行.为了避免死锁(方法将永远等待一个不会运行的线程),Visual Studio会杀死所有生成的线程.

我的建议是将调用移动到程序中,并使用其他方法来执行它.


aba*_*hev 0

这是因为服务器在 .NET 2.0 下运行,而客户端(通过 .NET Remoting)在 .NET 4.0 下运行。

将客户端切换到 .NET 2.0/3.5 解决了该问题。