我在使用WPF字形和文檔,並在.Net 4框架中遇到空引用異常。WPF - 將字體保存到磁盤,然後爲字體引發GlyphTypeface引發異常。爲什麼?
我提取並將真實類型的字體保存爲.ttf文件,然後嘗試根據字體創建字形。我第一次將字體保存到磁盤並基於字體實例化一個字形字體後從同一文件夾中的另一種字體創建字形字體我得到一個空引用異常。
說我有字體A和B. B沒有被保存到磁盤(A可能會或不會被保存到磁盤;這似乎並不重要):
1)保存B到磁盤在與A相同的文件夾中,
2)使用字體A創建字形字體,
3)使用字體B =異常創建字形字體。
Null reference exception at:
at MS.Internal.FontCache.FontFaceLayoutInfo.IntMap.TryGetValue(Int32 key, UInt16& value)
at MS.Internal.FontCache.FontFaceLayoutInfo..ctor(Font font)
at System.Windows.Media.GlyphTypeface.Initialize(Uri typefaceSource, StyleSimulations styleSimulations)
at System.Windows.Media.GlyphTypeface..ctor(Uri typefaceSource)
如果我重新啓動我的應用程序並再次運行它(字體B已在磁盤上),則步驟3不會引發異常。
的代碼保存字體到磁盤只是從二進制流寫一個部分,讓文件的旅途:
if (!File.Exists(filename))
{
using (FileStream fs = File.Create(filename, length))
{
fs.Write(m_data, m_index, length);
fs.Close();
}
}
任何想法?我不想把每個字體放在自己的文件夾中...
感謝您的時間。
font-per-folder解決方法不適用於我,您是否曾發現有關此問題的更多信息? – Cheetah 2010-08-04 16:57:30
不,對不起。解決方法仍然適用於我。我使用的是.Net 4.0(我認爲它在.Net 3.5 SP1中不是問題,但我不積極)。我在創建文件之前檢查字體是否存在;我懷疑,如果你在自己的文件夾中創建一個字體,然後嘗試刪除/覆蓋它(不重新啓動你的應用程序),它會拋出異常。 – AndrewS 2010-08-05 13:09:03