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

问题描述

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

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

功能一:

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));
    }
}

功能二:

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 语句中使用相同的方法来获取位图图像,完全没有问题。

标签: c#uwp

解决方案


我找不到“找不到组件”的解决方案。(HRESULT 异常:0x88982F50)”</p>

我检查了你的代码。问题是您使用了错误的方法。您需要使用setImage方法BitmapImage为您的 File 实例创建,但不是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));

推荐阅读