- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是否应该在 System.Drawing.FontFamily.Families
属性中处理每种字体,这会返回一个实现 IDisposable
的 FontFamily
类数组?
在极少数情况下,当它们由属性访问器返回时,我是否应该处置也实现了 IDisposable
的任何其他类实例或实例数组?
最佳答案
我查看了使用 Reflector 的代码,我可以告诉您,当您访问该属性时,正在使用 SafeNativeMethods.Gdip.GdipCloneFontFamily()
分配大量字体句柄。对于每种字体。
如果不是太难,你应该这样做。如果不这样做,终结器将释放为每种字体分配的操作系统句柄,但是如果有很多字体,您真的不想花很长时间来处理它们。在调用终结器之前可能需要任意长的时间。
如果您正在访问 Families[]
重复属性,您最终可能会得到很多未发布的操作系统句柄,这可能会导致问题。
这是 FontFamily
的 Dispose() 方法输入:
private void Dispose(bool disposing)
{
if (this.nativeFamily != IntPtr.Zero)
{
try
{
SafeNativeMethods.Gdip.GdipDeleteFontFamily(new HandleRef(this, this.nativeFamily));
}
catch (Exception exception)
{
if (ClientUtils.IsCriticalException(exception))
{
throw;
}
}
finally
{
this.nativeFamily = IntPtr.Zero;
}
}
}
请注意,您会错过对 GdipDeleteFontFamily()
的调用这将释放底层操作系统句柄的字体。
(旁注:微软对这类事情的文档非常糟糕,因为他们的示例代码通常会忽略处理字体的问题。)
这是 Families
的实现:
public FontFamily[] Families
{
get
{
int numFound = 0x0;
int status = SafeNativeMethods.Gdip.GdipGetFontCollectionFamilyCount(new HandleRef(this, this.nativeFontCollection), out numFound);
if (status != 0x0)
{
throw SafeNativeMethods.Gdip.StatusException(status);
}
IntPtr[] gpfamilies = new IntPtr[numFound];
int num3 = 0x0;
status = SafeNativeMethods.Gdip.GdipGetFontCollectionFamilyList(new HandleRef(this, this.nativeFontCollection), numFound, gpfamilies, out num3);
if (status != 0x0)
{
throw SafeNativeMethods.Gdip.StatusException(status);
}
FontFamily[] familyArray = new FontFamily[num3];
for (int i = 0x0; i < num3; i++)
{
IntPtr ptr;
SafeNativeMethods.Gdip.GdipCloneFontFamily(new HandleRef(null, gpfamilies[i]), out ptr);
familyArray[i] = new FontFamily(ptr);
}
return familyArray;
}
}
注意它如何计算有多少字体,然后调用 GdipCloneFontFamily()
对于每一个并初始化一个新的 FontFamily
与返回的 IntPtr
.
关于c# - 我应该处理 FontFamily.Families 结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22147422/
我正在创建一个 WPF 应用程序,我需要在其中使用自定义字体。 A 创建了一个字体资源库,如此处所述 http://msdn.microsoft.com/en-us/library/ms753303.
我的目标是通过 DependencyProperties 操作应用程序的文本样式。我得到了一个图表,其中要对文本的大小、字体系列、颜色等进行操作。因此我想使用类似于 Word 等富文本编辑器的界面。
在为我的应用程序使用字体时,当找不到我在样式中设置的 FontFamily 时,我没有收到任何警告/错误/异常。 通常在 WPF 中,您会在输出窗口中收到一条警告消息,告诉您要绑定(bind)的内容不
我希望每 1 秒后连续更改段落的字体系列。这是我的非工作代码... $(document).ready(function() { var idee = document.getEl
我希望应用程序中的每个文本都是 sans-serif-thin但我不知道如何改变它。我可以添加 android:fontFamily="sans-serif-thin"到 TextView它工作得很好
我注意到当我们尝试使用 C# 列出字体时,它工作正常;但是,如果我们要在应用程序运行时安装新字体,调用字体枚举不会返回新字体,直到应用程序重新启动。 代码如下: public void Populat
好吧,我基本上想直接嵌入我将在我的 WPF 应用程序中使用的字体集合。它们存储在我自己的虚拟文件系统(如 WinRAR)中,我只想通过字节数组或内存流加载它们。但是,我一直无法找到任何可行的解决方案。
我有来自同一个系列的多个 .ttf 文件,例如: MyFont.ttf MyFont_Bold.ttf MyFont_Light.ttf MyFont_Medium.ttf 如果我想使用每个权重,我应
我正在使用以这种方式定义的字体类型,android studio 的布局设计 View 以天气图标字体显示字符串/ TextView 。 但是,当我运行这段代码时: public cla
我正在移动我的项目 drop Calligraphy 并使用原生 android android 对字体的支持。但是,如果我使用 AppCompat 元素而不是默认元素(TextView、Button
我在做: testing 所有这些系列都使用@font-face 嵌入。虽然 Windows 和 Linux 上的 Chrome 会加载后备中提到的所有字体系列(通过控制台中的网络加载选项进行检查),
我正在开发一个文本字体游戏,用户可以猜测屏幕上显示的字体,但是当我尝试比较单击的文本的 style.familyFont 和相应的数组元素字体时,出现了问题。 经过一些测试,似乎只有当 style.f
我正在尝试创建一个允许用户选择字体系列的控件,然后从该字体系列中选择一个字符。下面是我要实现的目标的示例。 用字体系列列表填充组合框非常简单: FontFamilyCB.DisplayMember =
我想创建一个图片框,使其形状适应特定字体的字符串。我需要它以便稍后创建文本并将其放在 AxWindowsMediaPlayer 控件上。 因此我创建了以下类: using System; using
我正在使用 Android Studio 并且在我的主要 Activity 中有一个 SwitchCompat 小部件。它的默认字体系列是 sans-serif-medium,我将其更改为 quick
我正在使用 Gdi+ 绘制一些文本,我正在尝试确保我创建的字体确实存在。我注意到无论我指定什么字体,它都能正常工作。我有以下代码: Font font(TEXT("SomeGibberishFOEIH
我需要为我的应用程序中的不同标签指定不同的 FontFamily。我需要使用默认字体(例如 Android 的 Roboto 和 iOS 的 Helvetica)及其修改(例如 Light、Mediu
有谁知道如何解决 AppCompat 主题的字体系列支持问题? 我在 Android 中使用了 AppCompat v7 库,它可以很好地处理 ActionBar 问题,但是下面提到的属性在 andr
在 res/font我已经定义了font-family像这样: 如何在 Jetpack Compose 中加载它并将其用作 FontFamily目的? 最佳答案 不幸的是,目前
我目前重构了我的应用程序以使用可下载字体,因此我没有任何字体 Assets 文件。我搜索了很多,我看到的唯一解决方案是将 FontFamily 设置在 CSS 文件中并将 src 指向 assets
我是一名优秀的程序员,十分优秀!