15

完全被困住了。我正在测试MetaTrader API并在尝试在 VS 2010 的即时窗口中运行方法时出现下一个错误:

在 mscorlib.dll 中发生了“System.Threading.ThreadAbortException”类型的第一次机会异常

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

评估需要一个线程临时运行。使用 Watch 窗口执行评估。

这是什么意思?它会因为运行时版本差异(api 2.0、app 4.0)而发生吗?

4

4 回答 4

7

我相信您通过即时窗口调用的方法最终会调用Debugger.NotifyOfCrossThreadDependency。此方法仅在 .NET 4.0 中引入,因此使用旧版本的运行时问题不会重现是有道理的。这篇博客文章详细解释NotifyOfCrossThreadDependency了它,但它的要点是它会导致 Watch 窗口显示一个 Refresh 按钮,必须在评估发生之前按下该按钮。但是,如果它是通过即时窗口评估的,则会出现“评估需要一个线程临时运行。使用观察窗口执行评估”错误。

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

    public int CauseError
    {
        get 
        {                
            Debugger.NotifyOfCrossThreadDependency();
            return 5;
        }
    }
于 2013-12-08T13:37:21.670 回答
6

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

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

于 2010-11-25T21:12:45.457 回答
0

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

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

于 2011-02-10T10:37:35.950 回答
-1

不要删除 app.config 将包含如下信息:

<configuration>
  <configSections>
    <sectionGroup name="userSettings" 
                  type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
      <section 
               name="MySolution.Properties.Settings"
               type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
               allowExeDefinition="MachineToLocalUser" 
               requirePermission="false" />
    </sectionGroup>
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>
于 2011-10-30T09:52:18.543 回答