最近看到博客园上 郑文亮对自定义消息弹出框的源代码,发现很不错,定义内容简单但是实用,其中我对一些内容的调用不是很理解,主要是 invoke()的使用,先截图其中一段代码下来,希望以后能弄懂,或者有大拿能给我启发。
1 // 跨线程使用之必须 2 private delegate DialogResult ShowItDelegate(Form owner); 3 private static DialogResult ShowIt(Form owner, MsgBox mbx) 4 { 5 if (owner != null 6 && owner.InvokeRequired) 7 { 8 ShowItDelegate d = new ShowItDelegate(mbx.ShowDialog); 9 return (DialogResult)owner.Invoke(d, owner); 10 } 11 12 return mbx.ShowDialog(owner); 13 } 14 15 #region "overloads of Show ..." 16 17 /// <summary> 18 /// 重载0.0: 显示自定义的消息框, 指定owner 19 /// </summary> 20 /// <param name="owner">宿主窗体</param> 21 /// <param name="msg">消息文本</param> 22 /// <param name="caption">消息标题</param> 23 /// <param name="btns">要在界面上显示的按钮组合</param> 24 /// <param name="icon">要在界面上显示的图标</param> 25 /// <returns></returns> 26 public static DialogResult Show( 27 Form owner, 28 string msg, string caption, 29 MsgBoxButtons btns, MsgBoxIcons icon) 30 { 31 using (MsgBox mbx = new MsgBox()) 32 { 33 mbx.SetIcon(icon); 34 mbx.SetCaption(caption); 35 mbx.SetMsg(msg); 36 mbx.LayoutBtns(btns); 37 MsgBox.DoBeep(icon); 38 39 return ShowIt(owner, mbx); 40 } 41 }