Оценка требует, чтобы поток работал временно. Используйте окно Watch, чтобы выполнить оценку

Я полностью застрял. Я тестирую MetaTrader API и получаю следующую ошибку при попытке запустить метод в Immediate Window VS 2010:

Первое случайное исключение типа "System.Threading.ThreadAbortException" произошло в mscorlib.dll

Первое случайное исключение типа "System.Threading.ThreadAbortException" произошло в System.Runtime.Remoting.dll

Оценка требует, чтобы поток работал временно. Используйте окно Watch, чтобы выполнить оценку.

Что это значит? Может ли это произойти из-за разницы во времени выполнения (api 2.0, app 4.0)?

4 ответа

Решение

Это связано с тем, что сервер работает под.NET 2.0, а клиент (через.NET Remoting) - под.NET 4.0.

Переключение клиента на.NET 2.0/3.5 решило проблему.

Я полагаю, что метод, который вы вызываете через Immediate Window, в конечном итоге вызывает Debugger.NotifyOfCrossThreadDependency. Этот метод был введен только в.NET 4.0, поэтому имеет смысл, что проблема не будет воспроизводиться при использовании более старой версии среды выполнения. Этот блог объясняет NotifyOfCrossThreadDependency подробно, но суть в том, что в окне "Watch" отображается кнопка "Refresh", которую необходимо нажать до того, как произойдет оценка. Однако, если он оценивается через Непосредственное окно, вы получаете сообщение об ошибке "Дляоценки требуется, чтобы поток временно выполнялся. Используйте окно Наблюдение для выполнения оценки".

Вот пример свойства, которое воспроизводит эту ошибку:

    public int CauseError
    {
        get 
        {                
            Debugger.NotifyOfCrossThreadDependency();
            return 5;
        }
    }

Я считаю, что ошибка означает, что метод, который вы пытаетесь выполнить, порождает поток. Однако, поскольку программа находится в режиме Break, она не может быть запущена. Чтобы избежать тупика (когда метод будет ждать вечно неиспользуемый поток), Visual Studio убивает все порожденные потоки.

Я предлагаю переместить вызов в программу и использовать другие средства для его выполнения.

Не удаляйте 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>

Закройте VS и перестройте приложение, оно вам поможет.

Другие вопросы по тегам