【发布时间】:2020-10-04 12:00:32
【问题描述】:
我目前正在努力获取我的 WPF 应用程序的窗口句柄。 这是App.xaml.cs的代码sn-p:
_Logger.Info("Creating main window and view model.");
MainWindow mainWindow = new MainWindow();
_Logger.Info("MainWindow created");
try
{
FrameworkAdjustments.WindowHandle = new WindowInteropHelper(mainWindow).EnsureHandle();
}
catch (Exception ex)
{
_Logger.Error("Could not ensure WindowHandle", ex);
}
_Logger.Info("WindowHandle created");
//...
var viewModel = new MainWindowViewModel();
mainWindow.Initialize(viewModel);
mainWindow.WindowState = WindowState.Maximized;
mainWindow.Show();
在极少数情况下,应用程序会在 try 内停止。我得到日志“正在创建主窗口和视图模型”。和“MainWindow created”,但没有别的。既不是错误,也不是“WindowHandle created”。
如前所述,这在任何其他机器上都无法重现,而不是在特殊客户的机器上。我该如何解决这个问题? 我需要获取窗口句柄,以创建其他必要的类。
提前致谢
编辑 1: 添加最后 5 行代码。
【问题讨论】:
-
你需要这个还是可以把它移到 MainWindow 的 Loaded 事件处理程序中?
-
如果应用程序崩溃,Windows 日志中有一个事件,希望是转储。您可能必须与那些打交道才能找到答案。我先确定你handle everything.
-
@Klaus Gütter:是的,我需要这个,因为在 sn-p 之后,创建了一个需要句柄的 DA-Server。
-
@Sinatr:不幸的是,windows 日志中没有条目
-
这似乎是一个非常奇怪的地方来放置不会显示主窗口的代码。我认为在 application.startup 完成并且某种窗口启动之前,您的应用程序不会真正启动。在没有正确加载的情况下自动化 wpf 应用程序似乎不太可能工作。但。我试过 private void Application_Startup(object sender, StartupEventArgs e) { MainWindow mw = new MainWindow(); var handle = new WindowInteropHelper(mw).EnsureHandle();在最后一行之后放置一个断点,它在 Visual Studio 中似乎可以正常工作。
标签: c# wpf interop window-handles