我一直关注输出到Debug.Window。
Der Thread 0xd88 hat mit Code 0 (0x0) geendet.
Der Thread 0x6fc hat mit Code 0 (0x0) geendet.
Der Thread 0xce8 hat mit Code 0 (0x0) geendet.
Der Thread 0x68c hat mit Code 0 (0x0) geendet.
我的代码是:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using Windows.Storage;
using Windows.UI.Xaml.Controls;
namespace WindowsIOTControlCenter.ImageRotation
{
class ImageRotation
{
Timer _time;
IReadOnlyList<StorageFile> pictures;
public ImageRotation(Grid targetGrid)
{
pictures = scanImagesFolder().Result;
}
private async Task<IReadOnlyList<StorageFile>> scanImagesFolder()
{
try
{
StorageFolder appFolder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("ImageRotation\\BackgroundImages");
IReadOnlyList<StorageFile> filesInFolder = await appFolder.GetFilesAsync();
foreach (StorageFile file in filesInFolder)
Debug.WriteLine(file.Name + ", " + file.DateCreated);
return null;
}
catch(Exception ex)
{
Debug.WriteLine(ex.Message);
return null;
}
}
}
}
我在inet中使用了一个非常基本的示例,因为我的原始代码在此示例中遇到了同样的问题。
我基本上想要一个位于指定目录中的文件列表。
逐步调试显示将目录分配给appFolder没有问题。
但是谈到
IReadOnlyList<StorageFile> filesInFolder = await appFolder.GetFilesAsync();
上面提到的输出逐步退出。很明显没有异常捕获,否则它将继续捕获(Exception ex)。
有谁知道我做错了什么或者能指出我问题的另一个解决方案?
任何提示都是相关的。
P.S。:对不起我糟糕的英语。
答案 0 :(得分:2)
错误的翻译是&#34; 线程0xd88以代码0(0x0)&#34;结束。这不是错误,此消息对于程序来说是正常的。
执行pictures = scanImagesFolder().Result;
后,通过在使用.Result
的任务上调用await
,您可能会导致程序死锁。
你可以做的一些事情。
filesInFolder = await appFolder.GetFilesAsync().ConfigureAwait(false);
,这使得它不再尝试在UI线程上运行其余代码,因此调用.Result
不太可能 < / strong>陷入僵局。如果GetFilesAsync
也没有使用.ConfigureAwait(false)
,您仍然可以死锁。将您的代码移出构造函数并在您的方法上使用await
而不是.Result
class ImageRotation
{
Timer _time;
IReadOnlyList<StorageFile> pictures;
public ImageRotation(Grid targetGrid)
{
};
public async Task LoadImages()
{
pictures = await scanImagesFolder();
}
如果需要,这将使pictures =
在相同的上下文中。如果您不需要该功能,请使用
public async Task LoadImages()
{
pictures = await scanImagesFolder().ConfigureAwait(false);
}
请阅读&#34; Async/Await - Best Practices in Asynchronous Programming&#34;,它会告诉您基本知识,例如不致电.Result
并避免async void
答案 1 :(得分:0)
尝试这样做: appFolder.GetFilesAsync()。ConfigureAwait(假)