我有一个小型的WinForms应用程序,它利用BackgroundWorker对象来执行长时间运行的操作.
后台操作会抛出偶然的异常,通常是当有人打开正在重新创建的文件时.
无论代码是否从IDE运行,.NET都会弹出一个错误对话框,通知用户发生了未处理的异常.使用Release配置编译代码也不会改变它.
根据MSDN:
如果操作引发了代码无法处理的异常,则BackgroundWorker会捕获异常并将其传递到RunWorkerCompleted事件处理程序,在该处理程序中,它作为System.ComponentModel .. ::.RunWorkerCompletedEventArgs的Error属性公开.如果您在Visual Studio调试器下运行,则调试器将在DoWork事件处理程序中引发未处理的异常的位置中断.
我希望有时抛出这些异常,并希望在RunWorkerCompleted事件而不是DoWork中处理它们.我的代码正常工作,并且在RunWorkerCompleted事件中正确处理错误,但我不能在我的生活中弄清楚如何停止.NET错误对话框抱怨发生"未处理的异常".
是不是BackgroundWorker应该自动捕获该错误?这不是MSDN文档中的内容吗?什么我需要做的通知.NET,这个错误是被处理,同时仍允许例外propage到RunWorkerCompletedEventArgs的错误属性?
我是C#XmlSerializer的新手,所以我可能会遗漏一些基本的东西.
我遇到的问题是我有一个类有List<T>另一个类.当我序列化主类时,XML看起来很漂亮,所有数据都完好无损.当我反序列化XML时,数据List<T>消失了,我留空了List<T>.我没有收到任何错误,序列化部分就像魅力一样.
反序列化过程中我错过了什么?
编辑:请注意,下面显示的代码不会重现问题 - 它的工作原理.这是真正的代码,做了一个简单的版本不工作.不幸的是,下面的代码已经足够简化,无法重现问题!
public class User
{
public User()
{
this.Characters = new List<Character>();
}
public string Username { get; set; }
public List<Character> Characters { get; set; }
}
public class Character
{
public Character()
{
this.Skills = new List<Skill>();
}
public string Name { get; set; }
public List<Skill> Skills { get; set; }
}
public enum Skill
{
TreeClimber,
ForkliftOperator
}
public static void Save(User …Run Code Online (Sandbox Code Playgroud)