线程在序列化过程中引发异常?

时间:2014-03-27 17:45:58

标签: c# wpf multithreading

对于给定的线程是否可能抛出异常,它会冒泡到Main Thread

e.g,

序列化代码

using (Package package = Package.Open(stream, FileMode.Create, FileAccess.ReadWrite))
{
     using (var xpsDoc = new XpsDocument(package, CompressionOption.Normal))
     {
         var rsm = new XpsSerializationManager(new XpsPackagingPolicy(xpsDoc), false);
         DocumentPaginator paginator = ((IDocumentPaginatorSource) flowDocument).DocumentPaginator;
         rsm.SaveAsXaml(paginator);
         rsm.Commit();
     }
}

SaveAsXaml内的DocumentPaginatorSource迭代到GetPage(int pageIndex)' s thread

如果给定的SaveAsXaml执行Exception并且在迭代中抛出Main thread会发生什么?它会继续迭代到SaveAsXaml吗?

GetPage(int pageIndex)是我无法控制的,但我知道它会尝试执行{{1}}并通过完成序列化所需的页数来完成序列化。

2 个答案:

答案 0 :(得分:1)

没有异常永远不会自动从一个线程移动到另一个线程。某些API(如Task.Wait)充当集合点,在该集合点处发生异常的编组,但它不会自动发生。

如果某个线程抛出了一个未处理的异常,则.NET运行时的默认行为是由于未处理的异常而终止该进程。

答案 1 :(得分:0)

也许您观察到的是,当.net中未处理异常时,运行时会将整个AppDomain作为安全措施。

后台线程中的未处理异常== app崩溃。

在.net 4.5中略有改变,而任务中的未观察到的异常被忽略(可以选择以前的行为)。