Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net &引用;无法计算表达式,因为代码已优化";从某个线程调用方法时_.net_Multithreading - Fatal编程技术网

.net &引用;无法计算表达式,因为代码已优化";从某个线程调用方法时

.net &引用;无法计算表达式,因为代码已优化";从某个线程调用方法时,.net,multithreading,.net,Multithreading,我在应用程序中遇到了一个strage行为。我有一个函数:在类任务中加载try-catch块。当我从主线程调用它时:Task.Load()运行正常 我创建了一个运行某种方法的线程。当我从thread方法调用Task.Load()时,我会收到以下消息: “无法计算表达式,因为代码已优化或本机帧位于调用堆栈顶部” 有人能指出问题出在哪里吗 提前谢谢 玛雅人 谢谢你的回复 史蒂夫,我正在使用调试构建。我认为这个问题与你的第一个想法有关,但我不知道如何处理它。这是示例代码,可能会有所帮助。该示例包含带有

我在应用程序中遇到了一个strage行为。我有一个函数:在类任务中加载try-catch块。当我从主线程调用它时:Task.Load()运行正常

我创建了一个运行某种方法的线程。当我从thread方法调用Task.Load()时,我会收到以下消息: “无法计算表达式,因为代码已优化或本机帧位于调用堆栈顶部”

有人能指出问题出在哪里吗

提前谢谢

玛雅人


谢谢你的回复

史蒂夫,我正在使用调试构建。我认为这个问题与你的第一个想法有关,但我不知道如何处理它。这是示例代码,可能会有所帮助。该示例包含带有Load方法的Task类和Dispatcher类,Dispatcher类启动一个新线程,从中调用Load方法:

public class Task{
  public long Id{get; set;}
  public string Name{get; set;}

  public void Load(DataRow row){
    try{
      Id = (long)row["id"];
      Name = row["name"].ToString();
    }
    catch(..){}
  }
}

public class Dispatcher{
  Thread dispatchingThread = new Thread(getTasks);

  private getTasks(){
    DataTable dt = DAL.GetPendingTasks();
    foreach(DataRow row in dt.Rows){
      Task task = new Task
      task.Load(row);
      //process task...
    }
  }
}
每次在其他位置Load()方法中都会出现“无法评估…”异常。当从主线程调用该方法时,该方法工作正常。(我在代码错误处理中省略了…)

抱歉发了这么长的邮件

再次感谢


Maya

这可能是与调试程序上下文有关的问题。当您在main()内运行时,上下文是清晰的-您处于进程的主/唯一线程中。当您生成一个新线程时,您必须确保在观察感兴趣的线程/代码的本地数据之前,您实际上处于该线程中。在Load()函数中放置一个断点,以确保在观察相关数据之前实际处于正确的线程中


另一种可能性是(正如消息所说)您正在调试一个已启用优化的发布版本,并且无法查看变量。首先使用调试版本尝试此操作。

这是与VS相关的问题,而不是多线程。请通知您使用的编译器和.NET版本。还有一些源代码可以帮助其他人帮助你。