UWP:检索已安装字体导致异常

UWP:检索已安装字体导致异常,uwp,win2d,Uwp,Win2d,在我的UWP应用程序中,我一直使用 try { var fonts = CanvasTextFormat.GetSystemFontFamilies(); return (fonts.Length>0) ? fonts.OrderBy(f => f).ToList() : new List<string>(); } catch (Exception) { return new List<string&

在我的UWP应用程序中,我一直使用

try
   {
       var fonts = CanvasTextFormat.GetSystemFontFamilies();
       return (fonts.Length>0) ? fonts.OrderBy(f => f).ToList() : new List<string>();
   }
   catch (Exception)
   {
       return new List<string>();
   }
试试看
{
var fonts=CanvasTextFormat.GetSystemFontFamilies();
return(fonts.Length>0)?fonts.OrderBy(f=>f.ToList():new List();
}
捕获(例外)
{
返回新列表();
}
工作得很好,直到它不再工作。现在,我得到了一个例外

{System.IO.FileNotFoundException: The specified module could not be found. (Exception from HRESULT: 0x8007007E)
   at System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pCPCMD)
   at Microsoft.Graphics.Canvas.Text.CanvasTextFormat.GetSystemFontFamilies()
   at FontHelper.<>c.<LoadInstalledFonts>b__11_0()}
{System.IO.FileNotFoundException:找不到指定的模块。(HRESULT的异常:0x8007007E)
位于System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pcmd)
在Microsoft.Graphics.Canvas.Text.CanvasTextFormat.GetSystemFontFamilies()中
在FontHelper.c.b_uu11_0()}
我将此部分移到了UI Dispatcher中,认为可能在调用
GetSystemFontFamilies()
的时间和对象方面存在限制。这并没有阻止例外

最让人恼火的是:它以前是有效的。没有变化,现在它只是停止工作。。。Win2D是版本1.25.0中项目的一部分

你知道是什么引起的吗

UWP:检索已安装字体导致异常

{System.IO.FileNotFoundException: The specified module could not be found. (Exception from HRESULT: 0x8007007E)
   at System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pCPCMD)
   at Microsoft.Graphics.Canvas.Text.CanvasTextFormat.GetSystemFontFamilies()
   at FontHelper.<>c.<LoadInstalledFonts>b__11_0()}
我不能复制你的问题,但我有其他方法来获得与nuget软件包的系统字体信息

public void GetFontLibrary()
        {
            SharpDX.DirectWrite.Factory factory = new SharpDX.DirectWrite.Factory();

            var fontCollection = factory.GetSystemFontCollection(false);
            var familCount = fontCollection.FontFamilyCount;

            for (int i = 0; i < familCount; i++)
            {
                var fontFamily = fontCollection.GetFontFamily(i);
                var familyNames = fontFamily.FamilyNames;

                int index;

                if (!familyNames.FindLocaleName(CultureInfo.CurrentCulture.Name, out index))
                {
                    if (!familyNames.FindLocaleName("en-us", out index))
                    {
                        index = 0;
                    }
                }

                string name = familyNames.GetString(index);

                FontList.Add(name);
            }

        }
public void GetFontLibrary()
{
SharpDX.DirectWrite.Factory=新的SharpDX.DirectWrite.Factory();
var fontCollection=factory.GetSystemFontCollection(false);
var familycount=fontCollection.FontFamilyCount;
对于(int i=0;i
UWP:检索已安装字体导致异常

{System.IO.FileNotFoundException: The specified module could not be found. (Exception from HRESULT: 0x8007007E)
   at System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pCPCMD)
   at Microsoft.Graphics.Canvas.Text.CanvasTextFormat.GetSystemFontFamilies()
   at FontHelper.<>c.<LoadInstalledFonts>b__11_0()}
我不能复制你的问题,但我有其他方法来获得与nuget软件包的系统字体信息

public void GetFontLibrary()
        {
            SharpDX.DirectWrite.Factory factory = new SharpDX.DirectWrite.Factory();

            var fontCollection = factory.GetSystemFontCollection(false);
            var familCount = fontCollection.FontFamilyCount;

            for (int i = 0; i < familCount; i++)
            {
                var fontFamily = fontCollection.GetFontFamily(i);
                var familyNames = fontFamily.FamilyNames;

                int index;

                if (!familyNames.FindLocaleName(CultureInfo.CurrentCulture.Name, out index))
                {
                    if (!familyNames.FindLocaleName("en-us", out index))
                    {
                        index = 0;
                    }
                }

                string name = familyNames.GetString(index);

                FontList.Add(name);
            }

        }
public void GetFontLibrary()
{
SharpDX.DirectWrite.Factory=新的SharpDX.DirectWrite.Factory();
var fontCollection=factory.GetSystemFontCollection(false);
var familycount=fontCollection.FontFamilyCount;
对于(int i=0;i
我用上述代码创建了一个空白应用程序,它可能会返回字体列表,您能否分享有关应用程序目标版本和操作系统版本的更多详细信息?操作系统Win10 Home 18362.836-我在同一操作系统版本18362中测试过的目标1809(17763)。它也可以工作,你能在其他计算机上测试吗?目前还没有准备好发送到另一台计算机。。。因此,一旦完成,我们将重新参与。现在,我只是使用Win10安装中的保证字体列表作为静态默认值,在调用失败时返回该方法。。。虽然很粗糙,但至少完成了一点工作。谢谢。我用上面的代码创建了一个空白的应用程序,它可能会返回字体列表,你能分享更多关于你的应用程序的目标版本和你的操作系统版本的详细信息吗?操作系统Win10 Home 18362.836-目标1809(17763)我在同一操作系统版本18362中测试过。它也可以工作,你能在其他计算机上测试吗?目前还没有准备好发送到另一台计算机。。。因此,一旦完成,我们将重新参与。现在,我只是使用Win10安装中的保证字体列表作为静态默认值,在调用失败时返回该方法。。。虽然很粗糙,但至少完成了一点工作。非常感谢。