WinUI3全屏子窗口关闭问题:视频播放结束后无法正常关闭
WinUI3 全屏播放窗口无法正常关闭的解决方案
问题场景
开发全屏子窗口FullScreenPlayer用于播放视频,视频结束时通过MediaPlayer_MediaEnded事件调用Close()方法,仅出现窗口变黑但无法关闭的情况,尝试Win32的DestroyWindow API也无效。
解决方法
1. 确保在UI线程执行关闭操作
MediaPlayer.MediaEnded事件可能在后台线程触发,WinUI的窗口操作必须在UI线程中执行,需通过DispatcherQueue将关闭操作调度到UI线程。
2. 先退出全屏模式再关闭窗口
直接关闭全屏状态的窗口易引发渲染异常,需先切换回默认窗口展示器,再执行关闭操作。
修改后的代码示例
调整MediaPlayer_MediaEnded方法如下:
private void MediaPlayer_MediaEnded(MediaPlayer sender, object args) { // 先退出全屏模式 appWindow.SetPresenter(AppWindowPresenterKind.Default); // 调度到UI线程执行关闭 DispatcherQueue.TryEnqueue(() => { Close(); }); }
额外验证点
- 确认调用窗口的代码中,
player变量是类级别的成员(而非局部变量),避免窗口实例被提前回收导致异常。 - 若使用WinUIEx的
WindowManager,可直接调用manager.Close()替代Close(),确保窗口管理逻辑统一:// 在构造函数中保留WindowManager引用 private readonly WindowManager _manager; public FullScreenPlayer() { InitializeComponent(); _manager = WindowManager.Get(this); appWindow = _manager.AppWindow; // 其他初始化代码... } private void MediaPlayer_MediaEnded(MediaPlayer sender, object args) { appWindow.SetPresenter(AppWindowPresenterKind.Default); DispatcherQueue.TryEnqueue(() => { _manager.Close(); }); }
内容的提问来源于stack exchange,提问作者minato
相关产品推荐
相关产品推荐

