你的位置:首页 > 软件开发 > ASP.net > Winform应用程序实现通用消息窗口

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

发布时间:2016-01-29 17:00:03
记得我之前发表过一篇文章《Winform应用程序实现通用遮罩层》,是实现了透明遮罩的消息窗口,功能侧重点在动图显示+消息提醒,效果看上去比较的炫,而本篇我又来重新设计通用消息窗口,功能重点在于消息提醒、进度报告,当然如果大家时间,可以将两种相结合,那样就会更完美了,我这里仍是以实 ...

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

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

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Draget='_blank'>wing;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)      {        throw waittingForm.WorkException;      }    }    public FRM_Waitting()    {      InitializeComponent();    }    public FRM_Waitting(string text, string message, Action<WaittingForWorkObject> workAction, object workParam = null)      : this()    {      this.Text = text;      this.Message = message;      this.WorkAction = workAction;      this.WorkActionParam = workParam;    }    private void FRM_Waitting_Load(object sender, EventArgs e)    {    }    private void FRM_Waitting_Shown(object sender, EventArgs e)    {      formContext = SynchronizationContext.Current;      if (WorkAction != null)      {        Thread workThread = new Thread(DoWork);        workThread.IsBackground = true;        workThread.Start();      }    }    private void DoWork()    {      try      {        var wfObject = new WaittingForWorkObject(this);        WorkAction(wfObject);      }      catch (Exception ex)      {        WorkException = ex;      }      formContext.Send(delegate(object o) { this.Close(); }, null);    }  }}

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:Winform应用程序实现通用消息窗口

关键词:winform

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录