我有一个基于C#的UWP构建的应用程序。它是几种类型的共享目标 - 照片,URL,文本。当孤立地运行时,那些共享合同工作得很好。但是,如果应用程序在激活共享目标时已经运行,则事情变得不可预测。
MSDN声明当您打开共享合约https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh871367.aspx时终止现有实例:
“请注意
如果您的应用在作为共享目标激活时正在运行,则会终止您应用的现有实例,并启动应用的新实例以处理合同“
然而事实并非如此,现有的应用程序一直在运行,并且新的" Window"在该应用程序实例中为共享合同创建。
事情一直持续到你结束为止。在调用ShareOperation.ReportCompleted()之后,共享窗口会像您期望的那样关闭。现有的应用程序开始无法预测。有时它只是有效。其他时候,您会看到原生例外情况,例如:
0x70B8468B处的未处理异常(ucrtbase.dll)请求致命程序退出。
或者,您会看到少数托管例外之一:
抛出异常:' System.Runtime.InteropServices.InvalidComObjectException' 附加信息:无法使用已与其基础RCW分离的COM对象。 或操作无法完成,因为窗口正在关闭。 (HRESULT异常:0x802A0201)
或
由于窗口正在关闭,因此无法完成操作。 (HRESULT异常:0x802A0201)
在其中一个例外之后,应用程序崩溃并退出。例外情况有时会立即发生,但有时它们会一直发生,直到您实际点击现有应用并重新关注它。
知道为什么会这样吗?我希望我们做错事我们可以解决,但我们并没有做任何异乎寻常的事情。我们处理共享数据并调用ReportCompleted。