我有一些代码可以在WPF C#应用程序中使用服务打开一个窗口。打开窗口后,我想创建该窗口的打印屏幕图像文件。问题是我的代码正在创建一个图像文件,该文件的窗口实际打开之前具有该区域的打印屏幕。我试图在ViewOpened事件上创建一个委托,以便它在生成打印屏幕之前一直等到窗口实际打开为止。但是在窗口打开之前,我仍然得到该区域的图像。我该如何解决?
这是我的代码:
private void M_printScreenButton_Click(object sender, EventArgs e)
{
var allViews = SystemConfigurationComponent.GetAllViews();
foreach (var view in allViews)
{
// TODO: Add condition to select which views to process. Maybe add a boolean field to View table.
if (string.Equals(view.Uri, @"gtcs\gcs\mmc_userpreferences", StringComparison.InvariantCultureIgnoreCase))
{
ViewsIntegrationService.OpenMimic(view.Uri, "", "", 2, ThisMimic.Context, null);
ViewsIntegrationService.ViewOpened += delegate
{
using (Bitmap bitmap = new Bitmap(view.DefaultWidth, view.DefaultHeight))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(new Point(view.DefaultLeft, view.DefaultTop), Point.Empty,
new Size() {Width = view.DefaultWidth, Height = view.DefaultHeight});
}
bitmap.Save(@"C:\\temp\\GTCS_PrintScreens\\test.jpg", ImageFormat.Jpeg);
//bitmap.Save(view.WindowTitle.Replace(" ", string.Empty).Replace("'", string.Empty) + ".jpg", ImageFormat.Jpeg);
}
//ViewsIntegrationService.CloseView(new AlstomGuiMimicImpl(m_mimicsManager, ThisMimic));
};
}
}
}
答案 0 :(得分:0)
看来您是先打开视图,然后在打开后添加事件处理程序。
尝试:
ViewsIntegrationService.ViewOpened += delegate ...
然后
ViewsIntegrationService.OpenMimic(...
另外,Loaded
事件可能是更好的屏幕快照。