WPF应用程序遇到问题并需要关闭,如何获得良好消息? - c#

我目前正在处理可处理数据库中数据的WPF应用程序,当我用具有约1000行的测试数据库对其进行测试时,它运行良好,但现在我想处理约50000行,并且在处理过程中崩溃了,这给了我“ “应用程序”遇到问题,需要关闭...您要将错误报告发送给Microsoft ...”。

现在,这似乎是其他几个问题的重复,但是我尝试了AppDomain.CurrentDomain.UnhandledException,AppDomain.CurrentDomain.ProcessExit,Application.DispatcherUnhandledException,但它崩溃了,但始终没有任何消息。

看起来是这样的:

private void OnStartup(object sender, StartupEventArgs e)
{
  AppDomain.CurrentDomain.UnhandledException += (s, args) =>
  {
    MessageBox.Show("Message1");
  };

  AppDomain.CurrentDomain.ProcessExit += (s, args) =>
  {
    MessageBox.Show("Message2");
  };

  this.DispatcherUnhandledException += (s, args) =>
  {
    MessageBox.Show("Message3");
  };

  try
  {
    Views.MainView view = new Views.MainView();
    view.DataContext = new ViewModels.MainViewModel();
    view.ShowDialog();
  }
  catch (Exception exception)
  {
    MessageBox.Show(exception.ToString());
  }
}

该处理由命令(带有命令绑定的GUI按钮调用此命令)启动:

public void Process()
{
  Thread workerThread = new Thread(new ThreadStart(DoProcess));
  workerThread.IsBackground = true;
  workerThread.Start();
}

private void DoProcess()
{
  try
  {
    // Most probably crashes during that
    DoStuff();
  }
  catch (Exception e)
  {
    System.Windows.MessageBox.Show(e.ToString());
  }
}

我在执行过程中检查了内存使用情况,它从未超过70兆,所以这应该不是问题。我使用2个COM组件,一个是.exe,另一个是.dll,我不知道问题是否可能来自此。请注意,有时这些组件会崩溃,并且在发生时确实会收到有用的错误消息。我与NHibernate一起从数据库读取/写入。

到目前为止,我完全不知道问题出在哪里(DoStuff()部分很大),而且我不理解错误是如何通过所有这些异常处理程序,并使应用程序崩溃而没有信息的。请注意,我无法在Visual Studio中调试该应用程序,因为我在未安装Visual Studio的VM上运行该应用程序(并且我已经等了2个月才让我的IT部门安装sql server,以便我可以在计算机上运行我的应用程序。

任何帮助,将不胜感激!

参考方案

您的DoProcess函数在后台线程中。另一个线程可能崩溃,或者您可能有一个问题,因为它不是UI线程,所以从后台线程调用MessageBox -您可能会遇到异常,然后由于MessageBox调用而从捕获中抛出新的异常。尝试在MessageBox调用之前插入代码以将消息写到文件中,看看是否可行,或者甚至可以通过Console.Beep()监听它:-)如果没有发现问题,请尝试在以下位置向文件添加日志语句在代码中的许多位置,直到缩小崩溃发生的位置为止。

WPF-将窗口大小设置为子用户控件大小 - c#

我有一个选项卡控件,该控件动态地填充有包含各种大小的用户控件的选项卡。打开选项卡后,我希望窗口自动调整大小,使其在活动用户控件下有意义。有一种干净的方法可以做到这一点吗?我正在使用标准的mvvm模式。 参考方案 在Window类上使用SizeToContent属性。<Window x:Class="WpfApplication1.MainWi…

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

改造正在返回一个空的响应主体 - java

我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…

WPF WebBrowser甚至使用ObjectForScripting在单独的线程上锁定UI - javascript

在与WPF Web浏览器控件绑定的ObjectForScripting上调用方法时,网页UI锁定会出现一个奇怪的问题。进一步的研究使我们意识到整个UI(包括WPF应用程序而不是WebBrowser)都已锁定。使用的技术是带有Caliburn.Micro和Autofac的WPF。我在COM可见类上使用方法来推送到Caliburn.Micro提供的事件聚合器。进…

WPF MVVM中的动态TabControl - c#

我几周前开始使用WPF(在C#中),现在我需要一些高级帮助来使用tabcontrol。首先,我正在使用MVVM(模型视图ViewModel)模式来设计我的应用程序,并且我有一个约束,即试图不要在文件(初始化xaml文件)后面的代码中添加代码。现在,我的问题是在MainWindow视图(窗口)中动态创建新的tabItem,当单击按钮(例如“新建选项卡”按钮)时…