【问题标题】:validating UpdateData(true) return value in MFC OnTimer routine在 MFC OnTimer 例程中验证 UpdateData(true) 返回值
【发布时间】: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?

标签: c++ timer mfc


【解决方案1】:

自己很早就得到了我的解决方案,但由于日程繁忙,没有时间分享它。

为了避免这个问题,我打开了另一个对话框来接收用户输入,因为OnTimer() 中的UpdatedData(FALSE) 在后台对话框中,所以子对话框UpdateData(TRUE) 中的用户输入不会干扰背景UpdatedData(FALSE)

【讨论】:

    猜你喜欢
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2014-02-10
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多