WPF应用无法从任务栏恢复(唤起)

2023-10-27

背景

两个window,一个在前(小屏播放视频),一个在后(全屏播放视频),点击切换按钮,两个window中的内容对调。当点击任意window上面的缩小按钮的时候,将所有的window的 windowState 设置为 minimized 。 期望当点击任务栏图标的时候 window(大屏)可以唤起,实际偶然性无法唤起,尚未找到任何规律,可以确定的是,每次出问题的时候,点击任务栏图标都有一个 LibVLCSharp.WPF.ForegroundWindow 的窗体唤起,此窗体并不会播放本应该在播放中的视频,此窗体仅调试状态下可以观测到(由于vs实时可视化树的存在,调试的时候每一个window中将有一个调试工具条),非调试状态下由于它是透明的无法观测到。

pSlLPEj.png

关键代码

最小化按钮点击事件代码:

  private void img_minimize_MouseLeftButtonDown(object sender,  MouseButtonEventArgs e)
        {
            foreach (Window w in Application.Current.Windows)
            {
                w.WindowState= WindowState.Minimized;
            }
            this.WindowState = WindowState.Minimized;
            if (null != smallVidwoWindow)
            {
                WindowState smallWindowState = smallVidwoWindow.WindowState;
                if (smallWindowState != WindowState.Minimized)
                {
                    smallVidwoWindow.WindowState = WindowState.Minimized;
                }
            }
            if (null != detailWindow)
            {
                detailWindow.WindowState = WindowState.Minimized;
            }
        }

疑似解决办法

由于尚未找到真正的原因,此解决办法仅为猜测的解决方案,无法给出说的通的原理。但是使用此方法后确实没有在复现此问题了。

疑似的解决办法为:修改设置windowState=Minimized 的顺序,将小屏窗体和详情窗体先最小化,再将主窗体(即大屏)最小化

  private void img_minimize_MouseLeftButtonDown(object sender,  MouseButtonEventArgs e)
        {
            if (null != smallVidwoWindow)
            {
                WindowState smallWindowState = smallVidwoWindow.WindowState;
                if (smallWindowState != WindowState.Minimized)
                {
                    smallVidwoWindow.WindowState = WindowState.Minimized;
                }
            }
            if (null != detailWindow)
            {
                detailWindow.WindowState = WindowState.Minimized;
            }
          this.WindowState = WindowState.Minimized;
        }

疑似原因

由于执行 WindowState = Minimized 的顺序为先最小化大屏,再最小化小屏,偶然情况下可能会出现隐藏的libvlc窗体(由LibVLCSharp.WPF.VideoView控件提供,实际是绑定到主窗体的一个ForegroundWindow)最后最小化,所以点击任务栏图标的时候大屏没有唤起,反而ForegroundWindow 被唤起,任务栏唤起的时候是以最后关闭的window为依据的吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF应用无法从任务栏恢复(唤起) 的相关文章

  • 有没有办法判断当前屏幕是否支持触摸? [复制]

    这个问题在这里已经有答案了 可能的重复 是否可以让我的 c wpf 程序知道用户是否有触摸屏 https stackoverflow com questions 5673556 is it possible to let my c shar
  • 以编程方式将 UserControl 从 ContentControl 移动到另一个 ContentControl

    在 WPF 应用程序中 我想在代码中将 UserControl 从 ContentControl 移动到另一个控件 myContentControl2 Content myUserControl 在这种情况下我得到一个错误 指定的元素已经是
  • 强制窗口在打开时获得焦点

    我有一个 WPF 应用程序 它通过套接字连接与 C MFC 应用程序进行通信 如果用户按下 C 应用程序中的特定按钮 则会显示一个新的 WPF 窗口 以下是调用以启动 WPF 窗口的代码 var window new Window wind
  • Prism RegionAdapter - 删除然后添加视图

    我有一个包含 AvalonDock 的 prism wpf mef 解决方案 我创建了一个RegionAdapterBase
  • C#/WPF:禁用 RichTextBox 的文本换行

    有谁知道如何禁用文本换行RichTextBox 例如 如果我有一个大字符串不适合窗口 RichTextBox将字符串中无法显示的部分放在新行中 我想禁用它 并使其仅通过使用Scrollbar 多谢 Cheers A RichTextBox
  • WPF;单击 ListView 中的空白区域时如何取消选择所有选定的项目

    当我有几个 甚至一个 selected items我按简单click在我的空白处ListView 空白 非行 我想取消选择所有选定的项目 这是我取消选择所有项目的功能 private void DeselectAllListViewItem
  • 如何从页面级别获取父框架?

    我有一个带有框架和几页的窗口 加载窗口时 框架导航到欢迎页面 当我单击欢迎页面内的按钮时 我希望父框架导航到另一个页面 为此 我需要从页面级别访问父框架 但我不知道如何执行此操作 我尝试了下面的代码 但它返回 null private vo
  • MultiDataTrigger 使用 OR 而不是 AND

    我正在尝试设置多个DataTriggers on my Button 我做了一些研究发现MultiDataTrigger允许您执行此操作 我想要Visibility我的财产Button如果设置为 falseCCTVPath string E
  • 滚动 X 轴绘图区域 - Silverlight 柱系列

    我有一个工作正常的柱形系列图表 我有一个需要添加的功能 我希望水平滚动能够启用到 x 轴的绘图区域 这是屏幕截图 如果您看到屏幕截图 我有 6 个项目 并且由于项目数量较多 条形图非常细 所以假设如果我有 20 个项目 那么条形图将根本不可
  • 即使在 GC Collect 和 WaitForPendingFinalizers 之后,窗口对象在关闭后也未释放?

    这是一个简单的测试应用程序 可帮助了解 WPF 内存使用情况 我想了解的关键是为什么MainWindow即使在关闭并等待 GC 完成之后 仍然被引用并且它的内存没有被释放 参见下面的代码清单 文本 MainWindow Finalizer
  • 将 WPF 快捷键绑定到 ViewModel 中的命令

    我有一个使用 MVVM 模式的 WPF 应用程序 将按钮连接到 VM 非常简单 因为它们实现了 ICommand 我有一个工作原理类似的上下文菜单 下一步是为上下文菜单创建快捷键 我不知道如何让快捷键调用命令 这是一个例子
  • 如何在 RichTextBox 中以编程方式移动插入符位置?

    我有一个 RichTextBox 其中的特殊文本位具有自定义格式 但是 存在一个错误 即插入字符后 插入符号会放置在新插入的字符之前而不是之后 这是因为对于每次编辑 代码都会重新计算内容以应用自定义格式 然后像这样设置 CaretPosit
  • 网格内的 ContentPresenter 可见性绑定不起作用?

    我有以下网格
  • 如何在Wpf中的用户控件中调用MahApps Metro对话框

    当我尝试调用 MahApps Metro 对话框时 我在传递值时遇到错误 在传递参数时调用对话框控制时我需要传递 Metrowindow 参数 但我需要在用户控件中调用它 下面是当我需要对话框控制时我将调用的方法 public async
  • 无法使用 DialogResult

    我尝试使用DialogResult检查一个Messagebox s 是 否 取消 我正在使用以下代码 我没有看到任何问题 DialogResult dlgResult MessageBox Show Save changes before
  • 从 xaml 获取 RowIndex

    我有一个带有 DataGridTemplateColumns 的 DataGrid 在 TemplateColumn 中 我使用工作正常的 DataTrigger 它从 DataGrid 父级检索项目计数
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 如何? WPF 窗口 - 最大化,不调整大小/移动

    我正在尝试创建一个已最大化打开的 WPF 窗口 无需调整大小 移动 在系统菜单中 也不在边框中 它应该一直最大化 除非用户最小化它 我尝试将 WindowState Maximized 和 ResizeMode CanMinimize 放在
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如

随机推荐