【问题标题】:Problem getting the window handle of WPF application获取 WPF 应用程序的窗口句柄的问题
【发布时间】: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


【解决方案1】:

您应该创建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();

【讨论】:

    【解决方案2】:

    大家好,感谢您的回复。我现在发现了这个问题并想告诉你,如果其他人遇到类似的问题。 .NET Framework 未正确安装。我已经卸载并重新安装,现在一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-19
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      相关资源
      最近更新 更多