调试时突然出现一个奇怪的错误。到目前为止,监视窗口中的变量已正确显示。现在,我总是在监视窗口中看到错误消息:
函数评估要求所有线程都运行
我无法检查任何变量了。我没有明确使用线程。我该怎么做才能使其恢复正常工作?
我已经禁用了某些论坛中提到的功能:调试器的选项窗口中的“启用属性评估和其他隐式函数调用”。但是没有成功,那么我得到了错误:
用户禁用错误隐式函数评估
调试时突然出现一个奇怪的错误。到目前为止,监视窗口中的变量已正确显示。现在,我总是在监视窗口中看到错误消息:
函数评估要求所有线程都运行
我无法检查任何变量了。我没有明确使用线程。我该怎么做才能使其恢复正常工作?
我已经禁用了某些论坛中提到的功能:调试器的选项窗口中的“启用属性评估和其他隐式函数调用”。但是没有成功,那么我得到了错误:
用户禁用错误隐式函数评估
Answers:
.ToList()
或.Any()
。
var
和IEnumerable<T>
公正分配db.AGENCY_TABLE.OrderBy(e => e.Name);
-可是一旦我用var
与.ToList()
(或List<T>
用.ToList()
同样适用),它揭示的结果!
当尝试使用实体框架从名为“ AGENCY”的表中获取项目时,我遇到了这个问题:
var agencies = db.AGENCY.OrderBy(e => e.FULLNAME);
将鼠标悬停在调试模式下的代理上,单击以展开选项,然后单击“结果”将使可怕的“功能评估要求所有线程都运行”,最后带有“请勿输入”图标,在该图标上,单击不执行任何操作。
2种可能的解决方案:
.ToList()
在末尾添加:
var agencies = db.AGENCY_TABLE.OrderBy(e => e.FULLNAME).ToList();
List<AGENCY_TABLE> agencies = db.AGENCY_TABLE.OrderBy(e => e.FULLNAME).ToList();
感谢Hp93帮助我解决此问题。在我找到该解决方案的MUG4N答案的评论中,它还提到了try.Any()
而不是.ToList()
,但这<T>
像<AGENCY>
is is那样提供了Boolean而不是a ,所以它可能无济于事。
解决方法-在调试选项中尝试其他路径。我发现可以单击“非公共成员”>“ _ internalQuery”>“ ObjectQuery”>“结果视图”,并以此方式获取值。
您应该进行线程安全调用,因为在多线程中访问Windows窗体控件不是线程安全的。这是我的简单代码,可以安全调用线程并设置进度栏。
public partial class Form1 : Form
{// This delegate enables asynchronous calls for setting
// the text property on a TextBox control.
delegate void StringArgReturningVoidDelegate(string text);
private Thread demoThread = null;
public int Progresscount = 0;
static EventWaitHandle waithandler = new AutoResetEvent(false);
public Form1()
{
InitializeComponent();
}
public static bool CheckForInternetConnection()
{
try
{
using (var client = new WebClient())
{
using (var stream = client.OpenRead("http://www.google.com"))
{
return true;
}
}
}
catch
{
return false;
}
}
public void Progressincrement()
{
waithandler.WaitOne();
while (CheckForInternetConnection()==true)
{
if (Progresscount==100)
{
break;
}
SetLabel("Connected");
Progresscount += 1;
SetProgress(Progresscount.ToString());
Thread.Sleep(TimeSpan.FromSeconds(1));
}
if (Progresscount <100)
{
Startthread();
}
SetLabel("Completed");
}
public void Startthread ()
{
this.demoThread= new Thread(new ThreadStart(Progressincrement));
this.demoThread.Start();
SetLabel("Waiting for connection");
while (CheckForInternetConnection() == false) ;
waithandler.Set();
}
private void SetLabel(string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.label1.InvokeRequired)
{
StringArgReturningVoidDelegate d = new StringArgReturningVoidDelegate(SetLabel);
this.Invoke(d, new object[] { text });
}
else
{
this.label1.Text = text;
}
}
private void SetProgress(string Value)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.progressBar1.InvokeRequired)
{
StringArgReturningVoidDelegate d = new StringArgReturningVoidDelegate(SetProgress);
this.Invoke(d, new object[] {Value});
}
else
{
this.progressBar1.Value = Convert.ToInt32(Value);
}
}
private void Form1_Load(object sender, EventArgs e)
{
Startthread();
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Responsive");
}
}
有关更多信息,MSDN