Winform应用程序实现通用消息窗口

本文介绍如何在C# Winform应用中设计一个通用的消息窗口,侧重于消息提醒和进度报告功能。通过后台线程处理耗时操作,确保UI的响应性。文章提供详细代码实现,并包含异常处理机制。测试示例展示了不同场景下的应用效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记得我之前发表过一篇文章《Winform应用程序实现通用遮罩层》,是实现了透明遮罩的消息窗口,功能侧重点在动图显示+消息提醒,效果看上去比较的炫,而本篇我又来重新设计通用消息窗口,功能重点在于消息提醒、进度报告,当然如果大家时间,可以将两种相结合,那样就会更完美了,我这里仍是以实现功能为主,由于代码相对简单,我就直接贴上所有代码,大家可以直接复制到本地测试,若发现问题可自行改正或反馈给我,我来完善,谢谢!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Threading;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    /// <summary>
    /// 等待窗口:用于处理耗时工作时,友好显示消息窗口
    /// 作者:Zuowenjun
    /// 日期:2016-1-29
    /// 网址:http://www.zuowenjun.cn
    /// </summary>
    public partial class FRM_Waitting : Form
    {
        private SynchronizationContext formContext;
 
        public string Message
        {
            get { return labMessage.Text; }
            set { labMessage.Text = value; }
        }
 
        public Action<WaittingForWorkObject> WorkAction { get; set; }
 
        public object WorkActionParam { get; set; }
 
        public Exception WorkException { get; private set; }
 
        public class WaittingForWorkObject
        {
            private SendOrPostCallback UpdateMessageAction = null;
            public SynchronizationContext Context { get; private set; }
 
            public object UserData { get; private set; }
 
            public void UpdateMessage(string msg)
            {
                this.Context.Post(UpdateMessageAction, msg);
            }
 
            public WaittingForWorkObject(FRM_Waitting parentForm)
            {
                this.Context = parentForm.formContext;
                this.UserData = parentForm.WorkActionParam;
                this.UpdateMessageAction = delegate(object o)
                {
                    parentForm.Message = o.ToString();
                };
            }
        }
 
 
        public static void WaittingForWork(Action<WaittingForWorkObject> workAction, object workParam = null, string text = "请稍候", string message = "系统处理中,请稍候...")
        {
            var waittingForm = new FRM_Waitting(text, message, workAction, workParam);
            waittingForm.ShowDialog();
            if (waittingForm.WorkException != null)
            {
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值