获取WPF应用程序的窗口句柄的问题

问题描述 投票:0回答:1

我目前正在努力获取我的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行代码。

c# wpf interop window-handles
1个回答
0
投票

你应该创建 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();
© www.soinside.com 2019 - 2024. All rights reserved.