如何在 Windows 窗体 C# 中执行代码时显示动画加载窗体

2023-12-04

我想在主窗体中执行一些代码时显示动画加载窗体。动画表单仅用于向用户显示操作正在执行,我想在操作完成后关闭它。我正在使用的代码是:

    public partial class Form_main_admin : Form
    {
        private Thread loadingThread;
        private string loadingText;

        public Form_main_admin()
        {
            InitializeComponent();
        }

     private void main_tabControl_SelectedIndexChanged(object sender, EventArgs e)
     { 
         switch (main_tabControl.SelectedIndex)
         {
             case 0:
                 // ...
                 break;
             case 1:
                 showLoadingForm("Loading");

                 // Load a datagridview (load data, adjust column widths) in Form_main_admin

                 closeLoadingForm();
                 break;
            }
    }

    private void showLoadingForm(string text)
    {
         loadingText = text;
         loadingThread = new Thread(new ThreadStart(openLoadingForm));
         loadingThread.Start();
    }

    private void openLoadingForm()
    {
         try
         {
             Form_loading loadingForm = new Form_loading(loadingText);
             loadingForm.ShowDialog();
         }
         catch 
         {
             Thread.ResetAbort();
         }
     }

     private void closeLoadingForm()
     {
         try
         {
             loadingThread.Abort();
         }
         catch 
         {
             Thread.ResetAbort();
         }

     }
}

问题是,当我在选项卡之间快速切换时,出现“线程正在中止”异常(请参见下面链接中的图片)。

http://postimg.org/image/bvre2bmi5/

如果用户更改选项卡太快,我不希望用户看到此异常。在阅读了该论坛上的其他帖子后,我意识到不建议我的实施。有人可以告诉我如何正确实现此功能吗?


如果您需要动画进度表,请尝试使用后台工作者类在附加线程中执行加载:

    public partial class MainForm : Form
    {
        /// <summary>
        /// Some progress form
        /// </summary>
        WaitForm waitForm = new WaitForm();

        /// <summary>
        /// https://msdn.microsoft.com/library/cc221403(v=vs.95).aspx
        /// </summary>
        BackgroundWorker worker = new BackgroundWorker();

        public MainForm()
        {
            InitializeComponent();

            worker.DoWork += (sender, args) => PerformReading();
            worker.RunWorkerCompleted += (sender, args) => ReadingCompleted();
        }

        /// <summary>
        /// This method will be executed in an additional thread
        /// </summary>
        void PerformReading()
        {
            //some long operation here
            Thread.Sleep(5000);
        }

        /// <summary>
        /// This method will be executed in a main thread after BackgroundWorker has finished
        /// </summary>
        void ReadingCompleted()
        {                        
           waitForm.Close();
        }
        
        private void button1_Click(object sender, EventArgs e)
        {
            //Run reading in an additional thread
            worker.RunWorkerAsync();
            //Show progress form in a main thread
            waitForm.ShowDialog();
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Windows 窗体 C# 中执行代码时显示动画加载窗体 的相关文章

  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 在 Automator 中编辑文本

    我想创建一个 Automator 服务 它可以获取所选文本并将其替换为编辑后的版本 i e 所选文本将类似于 这是所选文本 然后输出将采用该文本并输出类似 一些预定义的开始 这是选定的文本 这是选定的文本 我以前曾对文件名做过类似的事情 但
  • 如何使用 PHP Bitly v4 缩短 URL?

    我有 Bitly 的代码v3并且运行良好
  • RedirectToAction 不是重定向

    这不应该起作用吗 如果我最后有一个断点 它停在那里 但永远不会到达ContactAction 发布后的页面只是一个空白页面 没有源代码 我错过了什么 谢谢 您的联系人 ContactModel 模型 不应为 void 而应为 public
  • 如何将数据从应用程序发送到AppWidgetProvider?

    我陷入了一个特定的场景 用户从应用程序更新时间后 我需要立即更新我的小部件 我确实尝试通过 Intent Extras 发送数据来进行广播 但失败了 目前 我的数据在AppWidgetProvider我需要将此数据发送到服务 public
  • 更改 LISP 中列表的副本

    在 LISP 中 我有一个传递列表的函数 我想更改此列表的元素而不更改原始列表 通常情况下 我会使用copy list创建我将更改的列表的本地副本 但这似乎不起作用 CL USER gt defun test item let copy c
  • Azure DevOps 多阶段管道陷入等待批准状态

    我将托管的 Azure DevOps 与 Azure Git Repos 中的代码一起使用 我们曾经使用 经典 的基于 UI 的管道编辑器 但在构建 发布阶段正在转向 YAML 模板 过去 我配置了 CI CD 以便当代码通过拉取请求提交到
  • 类型“List”不是类型“List”的子类型

    我有一段从 Firestore 示例中复制的代码片段 Widget buildBody BuildContext context return new StreamBuilder stream getEventStream builder
  • 更新 Entity Framework 6 中的子对象

    使用实体框架6 2 我有以下两个模型 实体 public class City public int CityId get set public string Name get set public class Country public
  • Rails 如何获得最佳性能请求并行 sidekiq 工作线程

    我的 Rails 应用程序有一名 sidekiq 工作人员 该工作线程将向外部 api 发出 2500 个请求 响应是一个 xml 如何让该员工获得最佳绩效 在工作线程内部 生成应用程序级线程 例如 创建 10 个 ruby 线程来处理 2
  • 如何用 Python 编写与 Wikipedia 中的示例不同的策略模式?

    在 2009 年策略模式的维基百科条目中 有一个例子用 PHP 编写 大多数其他代码示例都会执行以下操作 a Context new StrategyA new a execute gt Doing the task the normal
  • 在 JavaScript 中检查字母数字的最佳方法

    对文件执行字母数字检查的最佳方法是什么INPUT领域在JSP 我已附上我当前的代码 function validateCode var TCode document getElementById TCode value for var i
  • Form_Load() '事件' 或覆盖 OnLoad()

    我希望有人尝试解释它们之间的区别 更具体地说 是示例使用场景 我正在重构一些窗口窗体代码和一个Form有一些代码在Form Load 事件并且也在protected override void OnLoad 调用的事件base OnLoad
  • @Dependent 范围在 Wildfly 中不是默认的吗?

    我在使用 Wildfly 通过 Inject 注入 POJO 时遇到一些麻烦 文档明确指出 Dependent 如果未指定 则默认范围 这意味着一个对象的存在只是为一个客户端 bean 提供服务 并且与该客户端 bean 具有相同的生命周期
  • 如何在Python线程中使用qtwebkit?

    我正在尝试使用 qtwebkit 解析 js 生成的网页 我找到了如何获取页面源的示例 import sys from PySide QtGui import from PySide QtCore import from PySide Qt
  • 如何测试更新方法?

    我是单元测试新手 并在我的 Java Spring Boot 应用程序中使用 JUnit 我有时需要测试更新方法 但是当我在网上搜索时 没有合适的示例或建议 那么 您能否澄清一下如何测试以下更新方法 我认为这可能需要与测试 void 不同的
  • 如何使用 beautifulsoup 打印 href 属性,同时通过 selenium 实现自动化?

    蓝色元素的 href 值是我想从此 HTML 访问的内容 我尝试了几种方法来打印链接 但没有成功 我的代码如下 discover page BeautifulSoup r text html parser finding accounts
  • 运行react-native run-android时出错

    https facebook github io react native docs getting started html I have followed the instruction that are on this link Bu
  • 在 Prolog 中对列表进行分区

    我正在尝试创建一个 Prolog 谓词 其中给定一个列表 可以看出该列表是否可以分为两个总和相同的列表 我有一个工作列表总和谓词 因此我在分区谓词中使用它 我首先尝试对谓词进行编码 以查看列表的第一个元素是否等于列表其余部分的总和 2 1
  • 通过 Office 365 REST API 标记消息?

    我正在寻找一种使用 Office 365 REST 消息 API 检测和设置电子邮件的 标记 状态的方法 我没有看到 Flag 被列为某个属性休息消息 尽管我确实看到它列在下面交换网络服务 我尝试进行 REST 调用 将 Flag 添加到筛
  • 如何在 Windows 窗体 C# 中执行代码时显示动画加载窗体

    我想在主窗体中执行一些代码时显示动画加载窗体 动画表单仅用于向用户显示操作正在执行 我想在操作完成后关闭它 我正在使用的代码是 public partial class Form main admin Form private Thread