【发布时间】:2023-03-03 11:19:01
【问题描述】:
我正在开发 MFC 应用程序 (VS2017)。
在那我有一个一秒钟的计时器。在 OnTimer() 例程以及我的业务逻辑中,我正在调用 UpdateData(FALSE) 以将一些运行时信息显示回 UI。
此外,我必须在用户输入事件处理程序中从 UI 获取一些用户输入,我正在调用 UpdateData(TRUE) 并在 OnTimer 例程中检查其返回值。
问题在于定时器在这里是一个独立的实体。即使我已经保护了OnTimer 内的UpdateData(FALSE),UpdateData(FALSE) 也会因用户输入空白而被执行,这会通过调用 assert 使程序崩溃。
/***SAMPLE Problem CODE****/`
void abc::OnEnUserInput()
{
IsvalidInput = UpdateData(TRUE);
}
void abc::OnTimer(UINT_PTR nIDEvent)
{
if (IsvalidInput == true)
{
UpdateData(FALSE);
}
}
任何帮助将不胜感激!!! 谢谢。
【问题讨论】:
-
显示有关崩溃的更多信息。显示调用堆栈。
-
对于空白输入,它会引发“输入正整数”异常。再加上一个调试断言失败窗口...
-
最简单的方法是使用
GetDlgItemText作为相应的编辑控件,检查字符串是否为有效的正整数,如果不是则不调用UpdateData(FALSE)。 -
DoDataExchange 中的哪一行抛出了断言?添加该行的代码。
-
您是否将
IsvalidInput初始化为 FALSE?