首页
学习
活动
专区
圈层
工具
发布

使用BackgroundWorker线程的WPF等待光标

作为一个云计算领域的专家,我可以告诉你,使用BackgroundWorker线程的WPF等待光标通常是在执行耗时操作时,为了避免UI界面卡顿,可以使用后台线程来执行这些操作。

在WPF应用程序中,可以使用BackgroundWorker类来创建一个后台线程,以便在后台执行耗时操作,同时更新UI界面的进度条或等待光标。

例如,以下是一个使用BackgroundWorker线程的WPF等待光标的示例代码:

代码语言:csharp
复制
using System;
using System.ComponentModel;
using System.Threading;
using System.Windows;

namespace BackgroundWorkerExample
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void StartButton_Click(object sender, RoutedEventArgs e)
        {
            // 设置等待光标
            Cursor = Cursors.Wait;

            // 创建BackgroundWorker线程
            BackgroundWorker worker = new BackgroundWorker();
            worker.DoWork += Worker_DoWork;
            worker.RunWorkerCompleted += Worker_RunWorkerCompleted;
            worker.RunWorkerAsync();
        }

        private void Worker_DoWork(object sender, DoWorkEventArgs e)
        {
            // 在后台线程中执行耗时操作
            Thread.Sleep(5000);
        }

        private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            // 在UI线程中更新界面
            Cursor = Cursors.Arrow;
            MessageBox.Show("操作完成");
        }
    }
}

在这个示例中,当用户点击“开始”按钮时,会创建一个BackgroundWorker线程,并在后台线程中执行耗时操作。在执行期间,UI界面会显示等待光标。当后台线程完成操作后,UI界面会更新,显示操作完成的消息。

总之,使用BackgroundWorker线程的WPF等待光标可以提高应用程序的响应速度,并提供更好的用户体验。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【C#】带等待窗体的BackgroundWorker

上一篇分享的是一个叫做WaitUI的执行器,可以执行任何方法,使用简单。...而这一篇分享的是一个叫做BackgroundWorkerUI的东东(下文简称bgwUI),看名字就知道它是基于BackgroundWorker(下文可能简称bgw)组件实现的,所以如果你更习惯bgw的使用方式...为true,等待窗体会显示【取消】按钮,用户可以通过点击它发出终止任务的请求,你可以像老样子一样,在DoWork中访问CancellationPending获知该请求 其余功能与bgw一致 使用示例:...+ e.Result); } } 与BackgroundWorker的用法区别: 这里只讲区别,没讲到的表示与bgw一致,不熟悉bgw用法的猿友请MSDN。...bgwUI重载了一个可传入IWaitForm实例的构造函数,就是可以传入自定义等待窗体,使用无参构造函数的话,就使用默认的等待窗体,即WaitForm DoWork事件中可以直接使用bgwUI的一组属性和方法

2K30

backgroundworker组件的使用

开始 在应用程序中添加一个BackgroundWorker实例,如果用的是VS,可以从工具上直接拖到应用程序: BackgroundWorker backgroundWorker1 = new BackgroundWorker...,DoWork 事件的代码是在另一个线程里执行的。...代码如下: 代码一: BackgroundWorker backgroundWorker1 = new BackgroundWorker(); //在另一个线程里开始操作(btnStart是一个按钮控件....RunWokerAsync(2000/*参数是可选的*/);  }  //DoWork事件在另一个线程里执行  private void backgroundWorker1_DoWork(objectsender...)方法,通过它传递操作完成的进度值,此外,该方法触发ProgressChanged事件,在是此事件中,通过ProgressChangedEventArgs的实例,接收到主线程传递过来的参数。

1.1K20
  • BackgroundWorker在单独的线程上执行操作

    直接使用多线程有时候会带来莫名其妙的错误,不定时的发生,有时候会让程序直接崩溃,其实BackgroundWorker 类允许您在单独的专用线程上运行操作。...可以通过编程方式创建 BackgroundWorker,也可以将它从“工具箱”的“组件”选项卡中拖到窗体上。...BackgroundWorker 事件不跨 AppDomain 边界进行封送处理。请不要使用 BackgroundWorker 组件在多个 AppDomain 中执行多线程操作。...下面使用BackgroundWorker 完成斐波那契数列的后台运算操作,斐波那契数列:1,1,2,3,5,8...n=(n-1)+(n-2) BackgroundWorker bw;         ...如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地解决问题。 注:文章参考了MSDN许多

    1.7K10

    并发编程 ---为何要线程池化

    引言 众所周知,使用线程可以极大的提高应用程序的效率和响应性,提高用户体验,但是不可以无节制的使用线程,为什么呢? 线程的开销 线程的开销实际上是非常大的,我们从空间开销和时间开销上分别讨论。...所以,由于要进行如此多的工作,所以创建和销毁一个线程就意味着代价“昂贵”,即使现在的CPU多核多线程,如无节制的使用线程,依旧会严重影响性能。...BackgroundWorker 是在内部使用了线程池的技术:同时,在WinForm或WPF编码中,它还给工作线程和UI线程提供了交互的能力。...WinForm和WPF的开发人员使用 BackgroundWorker。...Task是基于Task Parallel Library(TPL)构建的核心组件,它提供了强大的异步编程支持。利用Task,我们能够轻松定义异步方法、等待异步操作完成以及处理任务结果。

    30140

    WPF 在触摸线程等待主线程窗口关闭会让主线程和触摸线程相互等待 原理方法一方法二

    本文是记录一个线程相互等待导致主线程无法响应的问题,这个问题是属于一定可以复现的问题,是 WPF 的已知问题。如果遇到这个问题,属于暂时没有方法解决,只能规避。...这个问题的最简单复现步骤是在触摸线程,也就是 StylusInput 线程,等待一个主线程的窗口关闭,此时就会出现主线程卡住的问题 这个问题有两个复现方法,第一个方法属于必现的方法,第二个方法属于概率的方法...在开始说明问题之前需要大概讲一下 WPF 的触摸原理和这个问题的原理 原理 在 WPF 触摸下,是存在 Stylus Input 线程用于处理触摸相关的事情,在这个线程会调用 ThreadProc 进入循环...运行完成,而 WorkerOperationRemoveContext 需要在 Stylus Input 线程运行 这就是关闭窗口可能出现的主线程卡住问题,只要主线程等待没有完成,主线程就会一直等待...在主线程需要等待触摸线程运行移除 PenContext 代码,触摸线程需要等待主线程关闭窗口,这时两个线程就无响应 所有的代码在 github 方法二 在触摸触发的过程中,出现了窗口的关闭,会让主线程卡住

    1.3K30

    线程的通知与等待

    那么一个线程如何才能获取一个共享变量的监视器锁呢? ​ 1.执行synchronized同步代码块时使用该共享变量作为参数。...如下面代码所示,其中queue为共享变量,生产者线程在调用queue的wait()方法前,使用synchronized关键字拿到了该共享变量queue的监视器锁,所以调用wait()方法不会抛出 IllegalMonitorStateException...如果当前队列没有空闲容量则会调用wait()方法挂起当前线程,这里使用循环是为了避免上面说的虚假唤醒。...一个共享变量上可能会有多个线程在等待,具体唤醒哪个等待的线程是随机的。...因为上边也说过了notifyAll()方法会唤醒共享变量内所有的等待线程。这里就是唤醒了resourceA的等待集合里所有线程。只是线程B先抢到了resourceA上的锁,然后返回。

    1.3K30

    6搞懂线程池(二)

    抱歉各位多线程专栏托更这么久,这篇文章我们继续讲线程池的相关知识,其中将涉及到如下知识: 取消异步操作 等待事件处理器及超时 计时器 BackgroundWorker 零、取消异步操作 这一小节将引入两个类...一、等待事件处理器及超时 在线程池中存在一个非常棒的方法 RegisterWaitForSingleObject 。...三、BackgroundWorker 在这一小节我们将不使用线程池和委托而是使用了事件。事件表示了一些通知的源或当通知到达时会有所响应的一系列订阅者。下面我们先来看一下例子。...BackgroundWorker 主要用于 WPF 中,通过后台工作事件处理器代码可以直接与 UI 控制器交互。...与直接在线程池中与 UI 控制器交互的方式相比较,使用 BackgroundWorker 更好。

    60010

    WPF 使用 SharpDx 异步渲染 使用方法绑定渲染为什么空白等待画完异步渲染多线程渲染

    本文告诉大家如何通过 SharpDx 进行异步渲染,但是因为在 WPF 是需要使用 D3DImage 画出来,所以渲染只是画出图片,最后的显示还是需要 WPF 在他自己的主线程渲染。...这个方法适合不停变化的控件,如果是很少刷新的控件使用这个方法会降低 WPF 的性能。...那么就可以使用本文的这个类,这个类可以在调用时异步渲染,不会卡 UI 线程,在 SharpDx 渲染完成再通过 WPF 渲染,这时 WPF 渲染也就是画出图片,性能比画出 10000 个椭圆快很多。...在这里也是需要做相同的方法。 异步渲染 大家也可以看到,只需要使用一个新的线程去等待渲染就可以,使用新线程的方法是 Task ,但是不能把 d3dImage 放在另一个线程,他必须在主线程。...本文就告诉大家如何使用 SharpDx 异步渲染,还告诉大家如何使用 WPF 自带的类进行多线程渲染,下面就是本文这个控件的代码 建议大家自己写一个线程调度而不是使用 Task ,因为最近在写 Avalon

    2.4K30

    C#-WPF ProgressBar进度条

    浏览量 1 进度条常用在加载,下载,导出一些比较耗时的地方,利用进度条能让用户看到实时进展,能有更好的用户体验…… 直接开始 新建一个wpf项目,然后在主窗口添加一个按钮,用来控制进度的开始。...你在ui线程里面执行了耗时的操作,就会让界面进入假死状态,这时候我们就要改进一下,使用多线程。 多线程开始 我们重新开启一个线程来模仿进度条进度,在按钮的点击事件下进行调用。...新建一个wpf窗口,同样加入一个进度条控件,在主窗口的按钮点击事件中写入新窗口的创建和显示,在新窗口的构造函数中调用,进度条开始进度的方法。...类允许您在单独的线程上执行某个可能导致用户界面(UI)停止响应的耗时操作(比如文件下载数据库事务等),并且想要一个响应式的UI来反应当前耗时操作的进度。...当然,如果你要使用它提供的方法,必须要先设置一下它的某些属性,不然就没法使用,比如:要使用ReportProgress()(报告进度)的方法,先要设置WorkerReportsProgress=true

    1.3K20

    WPF 跨线程 UI 的方法

    本文告诉大家如何在 WPF 使用多线程的 UI 的方法 在很多的时候都是使用单线程的 UI 但是有时候需要做到一个线程完全处理一个耗时的界面就需要将这个线程作为另一个 UI 线程 在 WPF 可以使用...VisualTarget 做到多个 UI 线程的绘制,注意这里的 WPF 的渲染线程只有一个,多个 UI 线程无法让渲染的速度加快。...如果一个界面有很多的 Visual 那么渲染速度也不会因为添加 UI 线程用的时间比原来少 在 WPF 的 VisualTarget 可以用来连接多个不同的线程的 UI 元素,在使用的时候只需要创建,然后在另一个...代码请看 https://github.com/lindexi/UWP/tree/master/wpf/CaitrairSodeyatarFowfurur 更多博客请看 WPF 同一窗口内的多线程 UI...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

    1.9K30

    线程之间的协作(等待通知模式)

    因为该线程被唤醒之后可能条件依旧不满足       3:条件满足,执行业务逻辑     通知方:       1:获取对象的锁       2:改变相关条件       3:通知所有等待在对象的线程 都是属于...Object的方法 等待:wait 通知:notify/notifyAll 需求:一个快递在变更;里程数和地点的时候通知等待的线程处理变更后的请求 测试使用notifyAll唤醒 实体类 package...测试发现全部的线程全部被唤醒了,然后其中三个等待城市变化的线程再次进入阻塞,另外三个等待里程数变化的执行成功退出阻塞 返回结果: check km 11 the km is 101, I will change...DB. check site 11 因为notify通知任意一个在这个对象上阻塞的线程,如果正好通知到了,等待里程数的,那么也只有一个被唤醒,其他两个继续阻塞,如果通知到了一个等待城市变化的那么这个线程将继续进入阻塞...所以说notify的唤醒是随意的,并且信号只发出一次 但是据有人说,在线程进入等待的时候会进入一个等待队列,notify会唤醒第一个等待的线程 我得到的结果就是在HotSpot虚拟机当中 notify唤醒的是阻塞线程队列当中的第一个

    75951

    使用Disruptor完成多线程下并发、等待、先后等操作

    Java完成多线程间的等待功能: 场景1:一个线程等待其他多个线程都完成后,再进行下一步操作(如裁判员计分功能,需要等待所有运动员都跑完后,才去统计分数。裁判员和每个运动员都是一个线程)。...场景2:多个线程都等待至某个状态后,再同时执行(模拟并发操作,启动100个线程 ,先启动完的需要等待其他未启动的,然后100个全部启动完毕后,再一起做某个操作)。...不可避免的是,都需要使用大量的锁,直接导致性能的急剧下降和多线程死锁等问题发生。那么有没有高性能的无锁的方式来完成这种复杂的需求实现呢? 那就是Disruptor!...Disruptor可以非常简单的完成这种复杂的多线程并发、等待、先后执行等。 至于Disruptor是什么就不说了,直接来看使用: 直接添加依赖包,别的什么都不需要。...我注释掉的部分分别为顺序执行、和12并发然后执行last。 上面那个图对应的代码主要就是after的使用。 运行结果 : ?

    2.1K30

    让WPF的初始化启动窗体动起来

    静态图片设置为启动画面效果 2 自定义窗体作为启动画面 此事例由博客园博主驚鏵投稿,原文链接:WPF实现等待界面效果[2]。...作者的话: ❝在使用一些应用的时候会发现等待界面做的用户体验很好,所以打算使用wpf实现一篇。 博文效果图: ? 动态窗体 2.1 开始实现上面的效果还差啥?...SoftwareHelper的启动画面效果 看了启动窗体的代码,xaml中代码与博文中相差不大,加了几个文本控件,用于显示加载提示信息,实际使用时可以动态添加,这段代码我就不复制展示了,点击这里可以查看...启动窗体后台代码也与博文有差异,待启动窗体Loaded完成后,使用了BackgroundWorker,将费时操作放在了DoWork中处理,待DoWork费时操作完成后,再启动了主窗体、关闭启动窗体。...TerminalMACS启动窗体 参考资料 [1] 点击下载图片: http://www.quanjing.com/imgbuy/QJ8706798336.html [2] WPF实现等待界面效果:

    2.6K10

    使用线程新建WPF窗体(公用进度条窗体)

    使用线程新建窗体 项目中需要一个公用的进度条窗体.大家知道在wpf中,有两个线程,一个是UI线程,另一个是监听线程(一直监听用户的输入).如果我们后台有阻塞UI线程的计算存在,那么界面上的比如进度条什么动态的...而你们又有什么好的解决方案没有? 在使用过程中发现一个很严重的问题,出现一个进度条窗体,系统内存就会增大一点,到最后要么卡死,要么自动退出.      ...原来在多线程程序运行中,由用户取消操作是一种非常常见的场景,比如用户使用windows资源管理器在当前文件夹中搜索文件时,可以通过点击其它文件夹而取消搜索。...中途停止一个线程的执行,通常用Thread.Abort方法,但这种方式会造成程序涉及的数据完整性受到破坏,线程所占用的一些系统资源(比如文件句柄等)也可能无法完成。...在设计多线程程序时,可设置一个用于接收外部取消消息的属性,然后在线程函数中分阶段地检测这一属性,每个阶段的检查点由软件开发者确定,并且决定线程如何优雅退出。

    2.3K100

    Java线程之间的通知与等待,详解!!

    那么一个线程如何才能获取一个共享变量的监视器锁呢? 1.执行**synchronized**同步代码块时使用该共享变量作为参数。...如下面代码所示,其中queue为共享变量,生产者线程在调用queue的wait()方法前,使用synchronized关键字拿到了该共享变量queue的监视器锁,所以调用wait()方法不会抛出 IllegalMonitorStateException...如果当前队列没有空闲容量则会调用wait()方法挂起当前线程,这里使用循环是为了避免上面说的虚假唤醒。...一个共享变量上可能会有多个线程在等待,具体唤醒哪个等待的线程是随机的。...因为上边也说过了notifyAll()方法会唤醒共享变量内所有的等待线程。这里就是唤醒了resourceA的等待集合里所有线程。只是线程B先抢到了resourceA上的锁,然后返回。

    1.9K30

    WPF 光标初始化的时候 temp 文件夹满了无法创建

    在 WPF 切换光标的时候,如果是通过本地资源的方法传入 stream 的,需要先复制到临时文件夹里面的文件,然后读取文件指针释放文件。...如果此时的 temp 文件夹满了,那么复制文件的时候就无法继续了,于是就无法创建完成光标 最近有老师找我说软件无法使用了,我尝试调试他的电脑,发现任何修改光标的代码就无法继续,因为无法创建光标 大概的修改光标的代码是这样写的...temp 文件夹无法访问的,但是可以通过通过修改环境变量修改当前进程使用的系统 Temp 文件夹的路径设置一个无法访问的文件夹作为 temp 文件夹 做一个无法访问的文件夹很简单,只需要右击属性安装,...去掉用户就可以了 运行代码就会发现提示对路径访问拒绝 System.UnauthorizedAccessException:“对路径“D:\lindexi\无法访问文件夹\WPF”的访问被拒绝。”...通过修改环境变量修改当前进程使用的系统 Temp 文件夹的路径 - walterlv GetTempFileNameA function (fileapi.h) Path.GetTempFileName

    78220

    WPF 支持的多线程 UI 并不是线程安全的

    WPF 支持创建多个 UI 线程,跨窗口的或者窗口内的都是可以的;但是这个过程并不是线程安全的。 你有极低的概率会遇到 WPF 多线程 UI 的线程安全问题,说直接点就是崩溃。...本文将讲述其线程安全问题。...简述这个线程安全问题 必要条件: 创建多个 WPF UI 线程 其实两个就够了,一个我们平时写的 App 类所在的主 UI 线程;一个后台 UI 线程,例如用来显示启动闪屏的 UI 线程 两个线程的话你需要大量重复试验才能复现...;而创建更多线程可以大大提高单次复现概率 这些 UI 线程都显示 WPF 窗口 无论是 .NET Framework 4.7.2 版本的 WPF,还是 .NET Core 3 版本的 WPF 都会出现此问题...WPF 中在 Visual Studio 2019 抓到的异常: 复现步骤 创建一个新的 WPF 项目(无论是 .NET Framework 4.7.2 还是 .NET Core 3) 保持自动生成的

    70420
    领券