【问题标题】:DispatcherTimer with Window.Close causing crashDispatcherTimer 与 Window.Close 导致崩溃
【发布时间】:2010-09-11 02:22:29
【问题描述】:

我正在编写一个 C# 应用程序,它有一个主窗口和一个单独的登录窗口。如果用户空闲一段时间,我设置了一个 DispatcherTimer 来打开一个新的登录窗口。

当我在登录窗口中调用 .Close() 时,我的应用程序崩溃了。但是,如果我删除 DispatcherTimer 代码,它可以正常工作。 System.Timers.Timer 是更好的选择还是我可能做错了什么?

奇怪的是,当我在 Visual Studio 中运行它时,该应用程序不会崩溃并且运行良好,但是当我安装它然后运行它时会崩溃。

谢谢,

马特

编辑:我刚刚尝试在我的机器上安装它,它工作正常,但安装在客户端机器上时会中断。不知道为什么会发生这种情况。也许安装项目中缺少依赖项?谢谢你们的帖子。

【问题讨论】:

  • 您是否有任何崩溃信息,例如堆栈跟踪或其他任何信息?
  • 尝试创建一个最小的重现测试用例并发布它。
  • 是的,窗口是模态的。
  • 我刚刚尝试在我的机器上安装它,它工作正常,但安装在客户端机器上时会中断。不知道为什么会发生这种情况..也许缺少依赖项?谢谢你们的帖子。
  • 您能否准确确定它何时崩溃? IE。窗口打开时,打开后,关闭时会崩溃吗?这有点便宜,但您可能会求助于写入日志(文本文件)来尝试跟踪实际发生崩溃的位置。

标签: c# .net wpf


【解决方案1】:

中断所有抛出的异常可以让您获得问题的调用堆栈。转到“调试”菜单中的“异常...”,并选中“已抛出”列中的所有复选框。

您可能希望在完成测试后撤消此操作,因为它会在应用程序正确处理的异常情况下收支平衡。

【讨论】:

  • 这是解决此问题的正确方法。可能有很多地方出错了,找出问题的唯一方法是在抛出异常时中断并调查它。在我的情况下,我是在await 之后的async 方法中创建DispatcherTimer,这意味着它在不同的线程上运行。
猜你喜欢
  • 2018-01-23
  • 2020-12-02
  • 2013-11-11
  • 2011-01-24
  • 2015-02-23
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多