.net &引用;无法计算表达式,因为代码已优化";从某个线程调用方法时
我在应用程序中遇到了一个strage行为。我有一个函数:在类任务中加载try-catch块。当我从主线程调用它时:Task.Load()运行正常 我创建了一个运行某种方法的线程。当我从thread方法调用Task.Load()时,我会收到以下消息: “无法计算表达式,因为代码已优化或本机帧位于调用堆栈顶部” 有人能指出问题出在哪里吗 提前谢谢 玛雅人.net &引用;无法计算表达式,因为代码已优化";从某个线程调用方法时,.net,multithreading,.net,Multithreading,我在应用程序中遇到了一个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版本。还有一些源代码可以帮助其他人帮助你。