“忙碌”效果叠加

2024-01-23

我有一个 wpf 应用程序,它执行非常繁重的操作,其中用户需要等待应用程序“思考”。

我想要做的是,当应用程序的主线程正在思考时,另一个线程将禁用整个窗口并给它一种灰色的颜色,并且屏幕中间会出现一个圆形进度条。

这是一个大问题,我真的不需要整个代码来做到这一点,只是一般的想法。

感谢你的帮助..


除了上述建议(后台工作人员、调度程序)之外 - 是的,这些是获得您想要的内容的正确技术,但让我讨论一下您在问题中请求的 UI 效果。如果您使用 MVVM 模式,则可以创建一些“我很忙”UI 并绑定到视图模型中的 IsBusy 属性以显示和隐藏 UI。例如:

public class MyViewModel : INotifyPropertyChanged
{
    // Bind to this property any UI you want to 
    // show/hide during long running updates
    public bool IsBusy 
    { 
        get { return _isBusy; } 
        set 
        {
            _isBusy = true; 
            OnPropertyChanged("IsBusy");
        }
    } 

    private void OnPropertyChanged(string prop)
    {
        var handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(prop));
        }
    }

    // Note: This is intended to be called on a background thread
    private void DoLongRunningOperationOnABackgroundThread()
    {
        try
        {
            IsBusy = true;

            // do your work
        }
        finally
        {
            IsBusy = false;
        }
    }
}

然后在 UI 中使用这个 xaml (或类似的)

<UserControl:MyControl x:Class="MyApp.MyControl"
                          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <UserControl.Resources>
        <BooleanToVisibilityConverter x:Key="boolToVis"/>
    </UserControl.Resources>
    <Grid>
        <!-- your UI code goes here -->

        <!-- Below this, at higher Z-Order place a control to gray out the screen when IsBusy = true -->
        <Border Background="#55000000" BorderThickness="0" Visibility="{Binding IsBusy, Converter={StaticResource boolToVis}}">
            <TextBlock Text="I AM BUSY!" Font-Size="32" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="White"/>
        </Border>
    <Grid>
</UserControl>    

最终效果是,当您使用后台工作程序或线程池在视图模型中调用 DoLongRunningOperation 函数时,Xaml 中定义的边框将在操作开始/停止时显示/隐藏。您也不需要在此处调用调度程序,因为 WPF 会为您处理线程编组。

网上也有一些带有旋转动画等的繁忙控件的实现,可以为 UI 增添趣味。

此致,

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

“忙碌”效果叠加 的相关文章

随机推荐

  • JavaScript 加载顺序导致问题

    我在标头中有一个 JS 文件 这是用于 Google DFP 的 在 我发现如果头 JS 文件没有在底部文件之前加载 我会在 Chrome 控制台中收到此错误 Uncaught TypeError Object has no method
  • SQL Server - 缺少 NATURAL JOIN / x JOIN y USING(字段)

    我刚刚阅读了 NATURAL JOIN USING SQL92 功能 这些功能 遗憾的是 在 SQL Server 当前的功能中缺失了 有没有人从支持这些的 DBMS 转到 SQL Server 或其他不支持的 DBMS 它们是否像听起来那
  • Matplotlib imshow,基于缩放动态重采样

    我试图在 matplotlib 中复制 MATLAB imagesc 调用的行为 具体来说 对于非常大的图像 减少图像 当用户放大时 以较少的抽取显示图像 我已经编写了一个可以做到这一点的类 但我的解决方案似乎过于复杂 有人知道更好的方法吗
  • iOS上的BLE技术从哪一点入手

    我需要使用BLE技术进行开发 我找到了一些介绍和源码 http processors wiki ti com index php Category IPhone4SBLEDemo http processors wiki ti com in
  • 计算一个 div 可以容纳多少个字符(来自字符串)而不使其换行?

    所以我有一个 div div 我想知道在换行到下一行之前 字符串可以容纳多少 长度 脚本应考虑元素的宽度 真实宽度 clientWidth 左右边距以及左右内边距 div div 而 JavaScript 假设魔法函数是calculate
  • 将谷歌广告添加到Android应用程序

    我正在尝试将谷歌广告添加到我的应用程序 这是我第一次 我也添加了 jar 文件 这是 xml
  • MS Chart:如何更改条形图轴上每个标签的颜色?

    我有一个条形图 它在 Y 轴上显示不同的类别 我可以使用以下方法同时更改轴上所有颜色的颜色 chart ChartAreas MyChart AxisY LabelStyle ForeColor Red 但是它不允许我为每个设置颜色 任何帮
  • 将 URL 转换为绝对路径

    有没有简单的方法可以将包含两字节字符的 URL 转换为绝对路径 我问的原因是我正在尝试寻找这样的资源 URL url getClass getResources getresources test txt String path url t
  • 从目录获取文件时排除某些文件扩展名

    How to exclude从目录获取文件时的某些文件类型 I tried var files Directory GetFiles jobDir 不过这个功能好像只能选择你想要包含的文件类型 不能排除 你应该自己过滤这些文件 你可以这样写
  • 我应该按照什么顺序包含头文件?

    我是编程新手 在我开始使用大量头文件后 头文件的主题让我陷入了困境 除此之外 我正在尝试使用预编译头 我还使用 SFML 库 因此我还必须包含那些标头 现在我有 stdafx h main cpp 然后是 A h A cpp B h B c
  • libgdx - 如何在舞台中添加背景图像?

    我正在学习 libgdx 但我陷入了困境 我在舞台中添加了一个按钮 现在我想在舞台中添加一个图像 以便该图像看起来像按钮的背景图像 我的意思是说按钮应该位于图像上 我一直在寻找教程但无法做到这一点 如何做呢 有什么帮助吗 您唯一需要做的就是
  • Nodemon 不工作:[nodemon] 由于更改而重新启动

    I use nodemon questions tagged nodemon作为节点中的开发依赖项 突然 CLI 中显示 nodemon 由于更改而重新启动 当我更改代码时 然后我已经全局安装了nodemon 但它仍然无法工作 它不适用于任
  • 如何在不使用if的情况下编写Fibonacci Java程序[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 在 int Fibonacci in
  • IE 下的脚本 onload/onerror(用于延迟加载)问题

    我正在重建我的延迟加载模块以接受异步请求 但我有一个大问题 Internet Explorer 不支持 script onload onerror 旧脚本确实全局评估了使用 ajax 同步调用读取的目标脚本源 它工作得很好 它是跨浏览器的
  • 有没有办法在 HTML5 视频上使用 DRM?

    由于 Flash 正在节节败退 我想知道是否有办法通过 DRM H264 ogg 和 WebM 保护 html5 视频 On the HTML5 上的 W3C 常见问题解答 http www w3 org html wiki FAQs Is
  • 如何在 Windows 中以编程方式更改 DNS 服务器?

    我想以编程方式更改 DNS 服务器 我不想建立DNS服务器 我只是想自动更改主备dns服务器 这项工作需要用Python来完成 您可以使用 os system 调用命令行工具来为您完成此操作 import os os system nets
  • VS2017任务运行资源管理器未找到任务

    我正在尝试在 VS 2017 内的 MVC Core 项目中设置 gulp 我有我认为有效的 gulpfile js var gulp require gulp var rimraf require rimraf var concat re
  • 在 DataBound 事件上获取绑定到 ListView 的数据

    我有一个 ListView 控件 并且已向该控件添加了一个 DataBound 事件 不知道这是否正确 我想从该事件访问绑定到该特定 ItemTemplate 的数据 这可能吗 C 解决方案 protected void listView
  • 当 contenteditable 中有多行时,替换光标前的单词

    我想替换光标之前的单词contenteditablediv 另见在文本区域或 contenteditable div 中键入 TAB 时检测最后写入的单词 https stackoverflow com questions 50794324
  • “忙碌”效果叠加

    我有一个 wpf 应用程序 它执行非常繁重的操作 其中用户需要等待应用程序 思考 我想要做的是 当应用程序的主线程正在思考时 另一个线程将禁用整个窗口并给它一种灰色的颜色 并且屏幕中间会出现一个圆形进度条 这是一个大问题 我真的不需要整个代