记得我之前发表过一篇文章《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
(#换成@)。