這裏有一些用linqpad編寫的C#代碼來重現問題。繪製長度超過65536的字符串時GDI + DrawString泛型異常?
var font = new System.Drawing.Font("Arial", 8);
using (var g = System.Drawing.Graphics.FromHwnd(IntPtr.Zero))
{
//65536 characters is fine
g.DrawString("a".PadLeft(65535, 'a'), font, System.Drawing.Brushes.Black, new System.Drawing.RectangleF(0, 0, 1, 1));
//65537 characters causes an error.
g.DrawString("a".PadLeft(65536, 'a'), font, System.Drawing.Brushes.Black, new System.Drawing.RectangleF(0, 0, 1, 1));
//65537 characters is however fine if the width is over 600581
g.DrawString("a".PadLeft(65536, 'a'), font, System.Drawing.Brushes.Black, new System.Drawing.RectangleF(0, 0, 600582, 1));
}
任何人都知道字符串的長度和佈局矩形的寬度之間的確切關係嗎?數字600581似乎非常武斷。雖然65536更有意義,因爲它是0x10000。
大多數的例外是因爲程序不能寫,因爲權限的文件。也許你正在試驗的數字正在觸發文件緩存。 –
我在Win8上死於32001。避免將GDI +推向邊緣,它會以字節爲單位。你應該在這裏使用TextRenderer。 –
我不這麼認爲,因爲如果佈局寬度超過任意數字,我可以傳遞一個長度爲100萬的字符串。 – Will