【发布时间】:2011-08-30 09:57:12
【问题描述】:
我有一个 winform 应用程序。每隔几秒钟我就会检查一些日志文件,读入任何新数据并将任何新数据插入数据库。
当我运行应用程序大约一个小时 1/2 时,我得到一个 StackOverflowException。整个期间的日志文件中没有新数据,因此数据库中没有添加任何新数据。
这里的代码出错了……
if (pictureBox == null)
{
continue;
}
if (pictureBox.InvokeRequired)
{
var toolTip = new ToolTip();
GameServer tempGameFile = gameServer;
pictureBox.Invoke(new MethodInvoker(
() => toolTip.SetToolTip(pictureBox,
string.Format(
"{0} : Last Checked: {1}; Last Updated: {2}",
tempGameFile.Name,
tempGameFile.CheckedOn.ToLongTimeString(),
tempGameFile.UpdatedOn.HasValue
?
tempGameFile.UpdatedOn.Value.ToLongTimeString()
: "-No Date Set-"))));
}
pictureBox.Image = Resources.RedButton;
pictureBox.Invoke(..) 正在抛出该错误。
所以 .. 我不知道如何才能弄清楚这是怎么回事?有什么建议吗?
更新
尝试Dmitry 的建议我已经启动了 ANTS 分析器内存配置文件 .. 并快速浏览了一些东西 .. 似乎有很多 ToolTip 控件的实例。
这是 20 分钟后的课程列表摘要。
很多事件处理程序(我没有发布什么吗?)
还有一些工具提示...
Here is a screenshot 的所有实例和 here is a screenshot 的单个 ToolTip 控制图/地图 .. 我不知道如何阅读 blush
【问题讨论】:
-
是什么触发了发布的代码?它不包含方法签名并且不清楚,至少对我来说不是。
-
这是我的问题 Samuel -> 我也不确定。这就是应用程序在
pictureBox.Invoke(..)方法上崩溃的地方。我不确定这是否是错误的,或者我如何确认?我想知道我是否一直在使用那条线调用但从不清理自己?否则我是否需要让其他应用程序来查看尚未清理的实例(仍然有对它们的恶意引用)或其他东西...... ??? -
该代码放在哪个事件中?
-
我已经让应用程序再次运行.. 需要再等一个小时左右才能抛出 SOE :( 现在.. 该代码放置在什么事件中?这是一个被调用的方法在
GameServersParsingBackgroundWorker_DoWork.. 一个BackgroundWorker进程内。 -
很难想象这会给出一个 SO 错误。您的代码中是否有嵌套的事件处理程序和/或 Application.DoEvents()?错误出现在这里并不意味着它是在这里引起的。
标签: c# .net winforms debugging stack-overflow