在调试异步方法时,应用程序挂起在设备上

时间:2014-05-29 06:01:34

标签: c# windows-runtime windows-phone-8.1 win-universal-app

我关于the guide at MSDN关于下载文件的问题。所以我做了一个非常简单的下载:

private async void performDownload_Click(object sender, RoutedEventArgs e)
{
    CancellationTokenSource myCts = new CancellationTokenSource();
    ulong bytesReceived = await DownloadWebFile("myFile.jpg", myCts.Token);
    var forBreakpoint = 5; // set breakpoint here - isn't being hit on a device
    // some further code
}

public async Task<ulong> DownloadWebFile(string fileName, CancellationToken ct)
{
    Uri requestUri = new Uri("http://photojournal.jpl.nasa.gov/jpeg/PIA17555.jpg");
    StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);

    BackgroundDownloader downloader = new BackgroundDownloader();
    downloader.Method = "GET";
    downloader.CostPolicy = BackgroundTransferCostPolicy.Always;

    DownloadOperation operation = downloader.CreateDownload(requestUri, file);
    operation.Priority = BackgroundTransferPriority.High;

    await operation.StartAsync().AsTask(ct);
    ulong bytes = operation.Progress.BytesReceived;
    return bytes;  // set breakpoint here - it is being hit
} // here App hangs (only on Device, on emulator works)

奇怪的情况是,在Emulator上一切正常,但在设备(Lumia 820)上,每次调试时代码都会挂起。如果将断点设置在DownloadWebFile - return bytes的最后一行,它将被命中,显示正确的字节数,您可以前进,但仅限于括号。当您尝试进一步前进时,应用程序挂起(没有断点也会挂起)。我可以通过IsolatedStorageExplorer看到的文件正确下载。

在尝试退出异步方法时,有时程序会在调试期间挂起(感谢@yasen)

1 个答案:

答案 0 :(得分:2)

最近,在设备上调试时,我无法退出异步方法。如果你有这个问题,一个简单的解决方法就是在你确定它们正常工作后跳过这些方法(不要进入它们,不要在它们中加入断点)。

另外,我在模拟器上没有遇到过这样的问题,所以如果可能的话 - 只需调试它,而不是设备。

但是,我不知道造成这种情况的原因。我很确定它曾经在某个时候起作用。