Pngbitmapencoder визуализирует пустое изображение при использовании проекта windowsservice
У меня есть проект WindowsService.В этом сервисе я хочу визуализировать UserControl, но png-файл пуст.
для теста я пишу следующий код для экспорта текстового блока, но результатом является пустой png-файл.
protected override void OnCustomCommand(int command)
{
Export();
base.OnCustomCommand(command);
}
private void Export()
{
var thread = new Thread(() =>
{
var grid = new Grid();
grid.Children.Add(new TextBlock() { Text = "ExportTest", FontSize = 60,
Background = Brushes.Red, Foreground = Brushes.Blue });
double widthg = grid.Width > 0 ? grid.Width : 1024;
double heightg = grid.Height > 0 ? grid.Height : 768;
grid.Measure(Size.Empty);
grid.Measure(new Size(widthg, heightg));
grid.Arrange(new Rect(0, 0, widthg, heightg));
grid.UpdateLayout();
Size size = new Size(widthg, heightg);
RenderTargetBitmap result = new RenderTargetBitmap((int)size.Width,
(int)size.Height, 96, 96, PixelFormats.Pbgra32);
DrawingVisual drawingvisual = new DrawingVisual();
using (DrawingContext context = drawingvisual.RenderOpen())
{
context.DrawRectangle(new VisualBrush(grid), null, new Rect(new Point(),
size));
context.Close();
}
result.Render(drawingvisual);
using (var fs = new FileStream(@"..\ExportTest.png", FileMode.Create))
{
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(result));
encoder.Save(fs);
}
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
}
Примечание: когда я запускаю функцию экспорта в проекте wpf, она работает идеально.
вот мой проект:
http://www.mediafire.com/file/aij5sg4zx80yc73/ExportProject.rar
кто-нибудь может мне помочь?
Что я уже пробовал:
Я поискал, но ничего не нашел. может ли кто-нибудь помочь мне?
Richard MacCutchan
Приложения-службы Windows не имеют доступа к дисплею.