我在遗留应用程序(不是我自己写的)中出现了一个奇怪的错误,当我在日历上更改日期时,出现StackOverflow异常。为什么将DoEvents放入循环会导致StackOverflow异常?
简化版本如下。这是包含两个控件的Windows窗体的代码隐藏,一个名为label2的标签和一个名为MonthCalendar的日历,名为monthCalendar1。
我认为这里的想法是创造一个打字机效果。我在XP中,我对Windows 7的同事能够运行这个确定:
private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
{
const string sTextDisplay = "Press Generate button to build *** Reports ... ";
for (var i = 0; i < 45; i++)
{
label2.Text = Mid(sTextDisplay, 1, i);
System.Threading.Thread.Sleep(50);
//Error on this line
//An unhandled exception of type 'System.StackOverflowException' occurred in System.Windows.Forms.dll
Application.DoEvents();
}
}
public static string Mid(string s, int a, int b)
{
var temp = s.Substring(a - 1, b);
return temp;
}
我无法看到堆栈跟踪,我看到的是:
{无法计算表达式,因为当前线程堆栈溢出状态。}
另外,我很感兴趣的意见,询问我为什么没有检查我的StackOverflow异常的堆栈跟踪,因为它看起来像this isn't possible没有第三方工具在最小。
这可能是什么原因造成的?谢谢
为什么你需要调用'DoEvents'? –
请分享例外情况和发生什么。 –
@ DanielA.White没有什么好的理由,我正在更改代码,我只是想知道是什么原因导致了错误,只是在某些计算机上。 – JMK