显示加载 WPF 的消息

我有一个连接和断开 WiFi 的 WPF 应用程序。
完成该过程大约需要 2 秒。在此期间,我想在当前窗口的顶部 显示一条简单的等待消息“正在连接..”或“正在断开连接...”,该消息会在该过程完成后立即关闭。

我应该用什么?

MessageBox不起作用,因为a)它有一个按钮,b)我不能通过代码随意关闭它(我认为)。


牛魔王的故事
浏览 79回答 3
3回答

动漫人物

当 Wi-Fi 开始连接时,使用:MyWindow popup = new MyWindow(); popup.ShowDialog();MyWindow包含信息的小表格在哪里。连接 Wi-Fi 后,使用:popup.Close();ShowDialog()阻止用户与父表单交互。

烙印99

您应该在后台线程上执行需要两秒钟才能完成的长时间运行的任务,并在调度程序线程上显示和关闭窗口,例如:Window window = new Window(){    WindowStyle = WindowStyle.None,    Content = new TextBlock { Text = "working..." }};Task.Run(() =>{    //do something that might take a while here...    System.Threading.Thread.Sleep(2000);}).ContinueWith(task => window.Close(),    CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());window.ShowDialog(); //Call .Show() instead if you don't want to block here until the task has finished.

噜噜哒

对于这类事情,我使用一个繁忙的“throbber”或“spinner”,它显示在窗口顶部的面板中。这只是用动画来显示正在发生的事情。我将其可见性绑定到窗口视图模型中的“IsBusy”属性。在继承自的基础视图模型中,因为这是一个常见的要求。当我将 Isbusy 设置为 true 时,微调器就会出现并呈现动画。当我将其设置为 False 时,微调器就会消失。我还有一个显示消息的区域。这些是动画的,所以它们会出现,然后在几秒钟后淡出。Throbber 是要查看的用户控件。这通常位于用户可以编辑内容的面板中 - 因此他们无法在更新数据时更改数据。我还在命令的 CanExecute 谓词中使用 IsBusy 来在处理完成时禁用按钮等。因为通知不一定是即时的,所以我检查所有命令并在 IsBusy 为 true 时退出。命令在运行时将 IsBusy 设置为 true。为了完整起见,可能与贝拉的问题没有直接关系。在某些情况下,我只想向用户显示处理正在进行,但允许他们继续工作。这种情况在我正在开发的游戏的地图和场景编辑器中经常发生。例如,当您将鼠标悬停在指挥官上时,指挥官与其下属之间会发生 Spatial A* 最佳路线计算,大约需要 1 到 12 秒的时间。我不想阻止用户,但我想表明在这种情况下正在发生一些事情。我有第二种机制,带有一个侵入性较小的颤动器,用于此目的。它出现在我的用户通知消息旁边。
打开App,查看更多内容
随时随地看视频慕课网APP