【发布时间】:2019-08-29 09:33:34
【问题描述】:
如下测试函数
- 从控制台应用程序调用时工作
- 在 WPF 应用程序中第一次调用时不工作。 使用“空”像素 (ARGB=0x00000000) 创建大小为 200 x 200 的 .png 文件。
- 在 WPF 应用程序中第二次调用(仅在下一行)时工作
- 从不同线程调用时有效
(请不要在这里讨论为什么使用 GDI。)
using System.Drawing;
...
class SomeClass
{
...
public void Test(string name)
{
using (var bmp = new Bitmap(200, 200))
{
using (var gr = Graphics.FromImage(bmp))
{
gr.FillRectangle(Brushes.Green, 0, 0, bmp.Width, bmp.Height);
bmp.Save(Path.Combine(@"C:\Temp\" + name + ".png"));
}
}
}
}
案例 2. 和 3. 从正在执行的 (WPF) MenuItem.Command 中调用。 在执行 MenuItem.Command 期间也会调用案例 4,但会委托给线程池 (ThreadPool.QueueUserWorkItem(...)) 进行测试。
问题似乎不在于 Save(..) 方法。看起来图形的绘制方法(例如 FillRectangle)没有按预期工作(画笔看起来很好)。
【问题讨论】:
-
调试器在说什么?
-
@sLw “调试器在说什么”到底是什么意思?我用调试器检查了 Brushes .Green,它看起来没问题。也没有例外。当我添加代码来分析位图位时,它们为零。
-
无法复制。在
App构造函数中调用一次时工作正常。很难想象为什么它不应该工作。 -
@Clemens "... 案例 2. 和 3. 从正在执行的 (WPF) MenuItem.Command 中调用..."。
-
也许吧,但这不重要。它适用于我的第一个电话。如果您认为 MenuItem 命令有特定内容,请发布足够的详细信息以使您的问题可重现。