我找不到“找不到组件的解决方案。(来自HRESULT的异常:0x88982F50)”

时间:2019-05-21 08:23:15

标签: c# uwp

加载BitmapImage时遇到问题。我正在使用2个函数返回一个bitmapimage。第一个函数确定应加载的图像,然后将StorageFile传递给第二个函数,以从资产文件夹中读取该文件。

第二个函数在我的代码中的其他地方似乎没有任何问题。如果将第一个功能实现为具有位图图像的对象中的方法,则第一个功能将正常运行。但是,在UI中无法正确显示图像存在一个奇怪的问题。

功能1:

public async Task<BitmapImage> setImage(StorageFile file)
{
    switch (file.ContentType)
    {
        case ".mp3":
            var mp3 = new Uri("ms-appx:///Assets/mp3.png");
            return await pullImage(await StorageFile.GetFileFromApplicationUriAsync(mp3));
        case ".wav":
            var wav = new Uri("ms-appx:///Assets/wav.png");
            return await pullImage(await StorageFile.GetFileFromApplicationUriAsync(wav));
        case ".mid":
            var mid = new Uri("ms-appx:///Assets/midi.png");
            return await pullImage(await StorageFile.GetFileFromApplicationUriAsync(mid));
        case ".midi":
            var midi = new Uri("ms-appx:///Assets/midi.png");
            return await pullImage(await StorageFile.GetFileFromApplicationUriAsync(midi));
        default:
            var def = new Uri("ms-appx:///Assets/Square150x150Logo.scale-200.png");
            return await pullImage(await StorageFile.GetFileFromApplicationUriAsync(def));
    }
}

功能2:

private async Task<BitmapImage> pullImage(StorageFile file)
{
    using (var randomAccessStream = await file.OpenAsync(FileAccessMode.Read))
    {
        var result = new BitmapImage();
        await result.SetSourceAsync(randomAccessStream);
        return result;
    }
}

这就是我调用函数的方式

List<File> files = new List<File>();
IReadOnlyList<StorageFile> subfiles = await globalFolder.GetFilesAsync();

foreach(StorageFile subfile in subfiles){
    files.Add(new File { Name = subfile.Name, Image = await pullImage(subfile)});
}

当前代码应返回默认情况下的bitmapImage,因为file.ContentType的情况当前不正确。我收到以下错误The component cannot be found. (Exception from HRESULT: 0x88982F50)

我还在另一个函数的case语句中使用相同的方法来获取位图图像,根本没有问题。

1 个答案:

答案 0 :(得分:2)

  

我找不到“找不到组件。 (来自HRESULT的异常:0x88982F50)”

我检查了您的代码。问题是您使用了错误的方法。您需要使用setImage方法为您的File实例创建BitmapImage,而不是pullImage

List<File> files = new List<File>();
IReadOnlyList<StorageFile> subfiles = await KnownFolders.PicturesLibrary.GetFilesAsync();
foreach (StorageFile subfile in subfiles)
{
    files.Add(new File { Name = subfile.Name, Image = await setImage(subfile)});
}

并且不要错过修改中间文件的源图像名称。

case ".mid":
var mid = new Uri("ms-appx:///Assets/midi.png"); // wrong name
return await pullImage(await StorageFile.GetFileFromApplicationUriAsync(mid));