UWP: получение установленных шрифтов вызывает исключение - PullRequest
1 голос
/ 28 мая 2020

В моем приложении UWP я извлекал установленные шрифты, используя

try
   {
       var fonts = CanvasTextFormat.GetSystemFontFamilies();
       return (fonts.Length>0) ? fonts.OrderBy(f => f).ToList() : new List<string>();
   }
   catch (Exception)
   {
       return new List<string>();
   }

Работало нормально, пока не перестало работать. Теперь я получаю исключение

{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()}

Я переместил этот раздел в диспетчер пользовательского интерфейса, думая, что, возможно, существуют ограничения на то, когда и кем GetSystemFontFamilies() может быть вызван. Это не предотвратило исключение.

Что самое неприятное: раньше это работало. Никаких изменений, теперь он просто перестал работать ... Win2D является частью проекта версии 1.25.0.

Есть идеи, что может быть причиной этого?

1 Ответ

0 голосов
/ 01 июня 2020

UWP: получение установленных шрифтов вызывает исключение

Я не могу воспроизвести вашу проблему, но у меня есть другой способ получить информацию о системном шрифте с помощью SharpDx. Direct2D1 пакет 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);
            }

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...