gpt4 book ai didi

.net - 从某个线程调用方法时"Unable to evaluate expression because the code is optimized"

转载 作者:行者123 更新时间:2023-12-01 23:46:44 24 4
gpt4 key购买 nike

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

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

谁能指出问题所在吗?

提前致谢。

玛雅

<小时/>

感谢您的回复。

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

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()方法中都会出现“无法评估...”异常。从主线程调用此方法时效果很好。 (我省略了代码错误处理...)

很抱歉这篇文章很长。

再次感谢,

玛雅

最佳答案

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

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

关于.net - 从某个线程调用方法时"Unable to evaluate expression because the code is optimized",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3599085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com