我目前正在努力获取我的WPF应用程序的窗口句柄。这里是App.xaml.cs的一个代码片段。
_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();
在极少的情况下,应用程序在尝试中停止。我得到了 "创建主窗口和视图模型。"和 "MainWindow created "的日志,但没有其他内容。既没有错误,也没有 "创建WindowHandle"。
如上所述,除了在一个特殊客户的机器上,在其他任何机器上都无法重现。我如何解决这个问题?我需要得到窗口句柄,以创建一个其他必要的类。
先谢谢你
编辑1: 添加了最后5行代码。
你应该创建 WindowInteropHelper
并进入手柄后的 SourceInitialized
事件已经提出。
MainWindow mainWindow = new MainWindow();
EventHandler eventHandler = null;
eventHandler = (ss, ee) =>
{
mainWindow.SourceInitialized -= eventHandler;
try
{
FrameworkAdjustments.WindowHandle = new WindowInteropHelper(mainWindow).EnsureHandle();
}
catch (Exception ex)
{
_Logger.Error("Could not ensure WindowHandle", ex);
}
};
mainWindow.SourceInitialized += eventHandler;
...
mainWindow.Show();