gpt4 book ai didi

c# - WPF Fonts.GetFontFamilies()缓存字体列表,如何清除缓存?

转载 作者:行者123 更新时间:2023-11-30 17:18:45 26 4
gpt4 key购买 nike

在 WPF 中,以下代码返回给定位置中所有字体的列表:

foreach (var fontFamily in Fonts.GetFontFamilies(@"C:\Dummy\Fonts\"))
{
System.Diagnostics.Debug.WriteLine(fontFamily.Source);
}

问题是如果您更改该文件夹的内容(添加或删除字体)并再次运行此代码,它会返回相同的列表(因为它是缓存 内部某处)。

在您退出应用程序之前,此缓存不会被清除!

有什么方法可以防止这种行为并始终让 WPF 在那个时候查看该文件夹中的字体?

注意:无论“Windows Presentation Foundation Font Cache 3.0.0.0”服务状态是启动还是停止,结果都是相同的。显然,服务未处理这种特定类型的缓存。

最佳答案

我相信您可能需要 disable the font cache service ,因为它可能会在需要时自动启动。

编辑:

您可能必须像这样自己获取 FontFamily 对象的列表:

private static FontFamily CreateFontFamily(string path) {
Uri uri;
if (!Uri.TryCreate(path, UriKind.Absolute, out uri))
throw new ArgumentException("Must provide a valid location", "path");

return new FontFamily(uri, string.Empty);
}

public static IEnumerable<FontFamily> GetNonCachedFontFamilies(string location) {
if (string.IsNullOrEmpty("location"))
throw new ArgumentException("Must provide a location", "location");

DirectoryInfo directoryInfo = new DirectoryInfo(location);
if (directoryInfo.Exists) {
FileInfo[] fileInfos = directoryInfo.GetFiles("*.?tf");
foreach (FileInfo fileInfo in fileInfos)
yield return CreateFontFamily(fileInfo.FullName);
}
else {
FileInfo fileInfo = new FileInfo(location);
if (fileInfo.Exists)
yield return CreateFontFamily(location);
}
}

姓氏可能有一些问题,但以上内容应该能为您提供大部分相关信息。

关于c# - WPF Fonts.GetFontFamilies()缓存字体列表,如何清除缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5488127/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com