C# ShareMediaTask仅在调试模式下工作

C# ShareMediaTask仅在调试模式下工作,c#,windows-phone-8,visual-studio-debugging,C#,Windows Phone 8,Visual Studio Debugging,通常,在调试至少2天之前,我不会询问StackOverflow。但这一次,不可能调试它。这就是我想要实现的目标: 用户按下快门按钮,拍摄照片 该应用程序进入第二个屏幕,允许用户对图像进行后期处理,保存到图像库,并使用ShareMediaTask与朋友共享图像 因此,使用此代码: MediaLibrary library = new MediaLibrary(); if (pic == null) { using (MemoryStream saveStream = new Memor

通常,在调试至少2天之前,我不会询问StackOverflow。但这一次,不可能调试它。这就是我想要实现的目标:

  • 用户按下快门按钮,拍摄照片
  • 该应用程序进入第二个屏幕,允许用户对图像进行后期处理,保存到图像库,并使用ShareMediaTask与朋友共享图像
因此,使用此代码:

MediaLibrary library = new MediaLibrary();
if (pic == null)
{
    using (MemoryStream saveStream = new MemoryStream(imagedata))
    {
        saveStream.Seek(0, SeekOrigin.Begin);
        pic = library.SavePicture("camera.NET_image_" + System.Environment.TickCount, saveStream);
        saveStream.Close();
    }
}
ShareMediaTask shareMediaTask = new ShareMediaTask();
shareMediaTask.FilePath = pic.GetPath();
shareMediaTask.Show();
如您所见,如果图片尚未保存到图片中心(通过使用“保存”按钮),则会将其保存到图片中心。保存效果很好。因此,我不明白为什么它在不处于调试模式时崩溃,在调试模式下也能正常工作

我得到的唯一提示是在启动sharetask时抛出一个excpetion(但sharetask仍然有效,我的朋友们实际上已经确认他已经收到了所有的图片)

对于一个真正有很多时间的人来说,下面是一个不可能实现的(至少对我来说,我声称自己不是一个完全的c#noob)长堆栈跟踪:

at System.IO.__Error.StreamIsClosed()
at System.IO.MemoryStream.get_Position()
at WriteMemoryStreamToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , ClassDataContract )
at System.Runtime.Serialization.ClassDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)
at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)
at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType)
at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiType(XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle objectTypeHandle, Type objectType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle, Type declaredType)
at System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)
at WriteKeyValueOfstringanyTypeToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , ClassDataContract )
at System.Runtime.Serialization.ClassDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)
at WriteArrayOfKeyValueOfstringanyTypeToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , CollectionDataContract )
at System.Runtime.Serialization.CollectionDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)
at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)
at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)
at System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
at System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
at System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
at System.Runtime.Serialization.XmlObjectSerializer.WriteObject(XmlDictionaryWriter writer, Object graph)
at System.Runtime.Serialization.XmlObjectSerializer.WriteObject(Stream stream, Object graph)
at Microsoft.Phone.Shell.BaseStreamPersister.Serialize(IDictionary`2 dictionary, IEnumerable`1 knownTypes)
at Microsoft.Phone.Shell.PhoneApplicationService.SaveState()
at Microsoft.Phone.Shell.PhoneApplicationService.FireDeactivated(UInt32 reason)
at Microsoft.Phone.TaskModel.Interop.ITask.Pause.Invoke(UInt32 reason)
at Microsoft.Phone.TaskModel.Interop.Task.FireOnPause(UInt32 reason)

虽然存在无法访问的流听起来很容易理解,但有人能告诉我它们是什么类型的流吗?因为至少在我的用户代码中,除了保存图像之外,没有任何流工作可以完成(这很成功,正如我在图片中心轻松看到的)

你能尝试取出保存流吗。Close()请看?…进一步思考…代码中的任何地方都有IFDEBUG语句吗?IFDEBUG:nether在任何地方都使用了它。正在删除saveStream.Close()不会改变任何事情,eigther。我想我在WP应用程序上也看到过类似的问题。我认为问题在于,在发布模式下,有更严格的规则,例如操作可能需要多长时间。我认为你仍然可以在发布模式下调试应用程序,或者至少设置断点;你能检查哪一行失败吗?