C# 用于共享图像的Windows Phone 8.1应用程序-在连接了Visual Studio调试器的手机上运行良好,但在没有调试器的情况下运行时崩溃
我正在尝试通过我的应用程序共享图像,当我通过visual studio在手机上运行应用程序时,一切正常,但当我尝试从手机上运行应用程序时,每次单击“共享”按钮时,它都会崩溃C# 用于共享图像的Windows Phone 8.1应用程序-在连接了Visual Studio调试器的手机上运行良好,但在没有调试器的情况下运行时崩溃,c#,windows,share,windows-phone-8.1,C#,Windows,Share,Windows Phone 8.1,我正在尝试通过我的应用程序共享图像,当我通过visual studio在手机上运行应用程序时,一切正常,但当我尝试从手机上运行应用程序时,每次单击“共享”按钮时,它都会崩溃 private async void dataTransferManager_DataRequested(DataTransferManager sender, DataRequestedEventArgs args) { args.Request.Data.Properties.Title =
private async void dataTransferManager_DataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
args.Request.Data.Properties.Title = "Let's Celebrate";
args.Request.Data.Properties.Description = "It's time to celebrate!";
DataRequestDeferral deferral = args.Request.GetDeferral();
try
{
var finalImg = await GenerateImage();
var folder = Package.Current.InstalledLocation;
const CreationCollisionOption option = CreationCollisionOption.ReplaceExisting;
var file = await folder.CreateFileAsync("letscelebrateshare.png", option);
var logicalDpi = DisplayInformation.GetForCurrentView().LogicalDpi;
var pixelBuffer = await finalImg.GetPixelsAsync();
using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
encoder.SetPixelData(
BitmapPixelFormat.Bgra8,
BitmapAlphaMode.Premultiplied,
(uint)finalImg.PixelWidth,
(uint)finalImg.PixelHeight,
logicalDpi,
logicalDpi,
pixelBuffer.ToArray());
await encoder.FlushAsync();
StorageFile logoFile =
await Package.Current.InstalledLocation.GetFileAsync("letscelebrateshare.png");
List<IStorageItem> storageItems = new List<IStorageItem>();
storageItems.Add(logoFile);
args.Request.Data.SetStorageItems(storageItems);
}
}
finally
{
deferral.Complete();
}
}
private async void dataTransferManager\u DataRequested(dataTransferManager发送方,DataRequestedEventArgs args)
{
args.Request.Data.Properties.Title=“让我们庆祝一下”;
args.Request.Data.Properties.Description=“该庆祝了!”;
DataRequestDeleral deleral=args.Request.getDeleral();
尝试
{
var finalImg=await GenerateImage();
var folder=Package.Current.InstalledLocation;
const CreationCollisionOption=CreationCollisionOption.ReplaceExisting;
var file=await folder.CreateFileAsync(“letscelebrateshare.png”,选项);
var logicalDpi=DisplayInformation.GetForCurrentView().logicalDpi;
var pixelBuffer=await finalImg.GetPixelsAsync();
使用(var stream=await file.OpenAsync(FileAccessMode.ReadWrite))
{
var encoder=await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId,stream);
编码器.SetPixelData(
BitmapPixelFormat.Bgra8,
BitmapAlphaMode.预乘,
(uint)最终像素宽度,
(uint)最终像素高度,
logicalDpi,
logicalDpi,
pixelBuffer.ToArray());
等待编码器。FlushAsync();
存储文件标识文件=
wait Package.Current.InstalledLocation.GetFileAsync(“letscelebrateshare.png”);
List storageItems=新列表();
storageItems.Add(logoFile);
args.Request.Data.setStorage项目(storageItems);
}
}
最后
{
延迟。完成();
}
}
编辑:因为我没有在C#中使用WP。我想你可以试试这个。希望这有帮助^ ^我在打开文件打开选择器时遇到了同样的问题。我找到了一个奇怪的解决办法。当我删除每个页面中的导航参数并使用静态变量时,这对我来说很好。我想这将有助于您如果应用程序在没有调试器的情况下崩溃,请在调试时尝试,共享目标对“挂起和关闭”(visual studio中的“生命周期事件”)可见。在大多数情况下,应用程序会崩溃,因为它被挂起并序列化数据。“它崩溃”不是一个有意义的问题描述。“崩溃”是什么意思?你有例外吗?如果是,确切的错误信息是什么?堆栈跟踪告诉了你它发生在哪里?@KenWhite我无法检查这是什么异常,因为正如我提到的,它在调试阶段运行完全没有错误,但当我断开手机与笔记本电脑的连接,并尝试再次运行应用程序时,当我单击“共享”按钮时,它就会关闭。然后,您必须插入一些代码来执行一些日志记录或显示一些消息对话框或其他内容,以找出它失败的地方。正如我所说,“it崩溃”并不是一个有用的问题描述。只是一个猜测:我看到有很多异步调用,您是否从非UI线程接触UI控件?这是调试时通常看不到的典型问题,因为当您逐步完成代码时,VS将与主UI线程同步。可能延迟就是一个例子,或者调用GenerateImage()?该方法是否涉及任何UI控件?Windows Phone 8.1不支持消息框,因此我尝试使用MessageDialog msg=new MessageDialog(例如Message);msg.showanc();但由于ShowAsync是可等待的,而且catch中不能有可等待的方法,所以问题仍然存在
private async void bla... [..]
{
Exception exc= null;
try
{
//All your stuff
}
catch(Exception ex)
{
exc = ex;
}
if(exc!=null)
await msg.ShowAsync();
}