Member 10527566 Ответов: 0

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 не имеют доступа к дисплею.

0 Ответов