1. Form1.cs
.....................................................................
private void button4_Click(object sender, EventArgs e)
{
CountDownEventHandler countDownEvent = CountDownEventHandler.getInstance(this, 5000);
countDownEvent.eventHandler += new EventHandler<AutoPutAwayEventArgs>(putAwayEvent_eventHandler);
countDownEvent.Start();
MessageBox.Show("定時關閉MessageBox","提示");
}
private void putAwayEvent_eventHandler(object sender,AutoPutAwayEventArgs e)
{
int countDown = e.CountDown;
label2.Text = e.CountDown.ToString();
if (countDown == 0)
{
CloseMessageBox();
}
}
[DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)]
private extern static IntPtr FindWindow(string LPCTSTRlpszClassName, string LPCTSTRlpszWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int PostMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
public const int WM_CLOSE = 0x10;
private void CloseMessageBox()
{
//根據MessageBox的标题,找到MessageBox的窗口
IntPtr ptr = FindWindow(null, "提示");
if (ptr != IntPtr.Zero)
{
//找到即關閉
PostMessage(ptr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
}
}
2 定時事件
(1)CountDownEventHandler.cs
public class CountDownEventHandler
{
private int countDownTimes;
private Control owner = null;
private static CountDownEventHandler autoPutAwayEventHandler;
private Thread workThread;
private CountDownEventArgs eventArgs;
public event EventHandler<CountDownEventArgs> eventHandler;
public CountDownEventHandler(Control owner,int countDownStart)
{
this.countDownTimes = countDownStart/1000;
this.owner = owner;
this.eventArgs = new CountDownEventArgs();
}
/// <summary>
/// 倒計時初始時間為毫秒
/// </summary>
/// <param name="owner"></param>
/// <param name="countDownStart">倒計時開始時間</param>
/// <returns></returns>
public static CountDownEventHandler getInstance(Control owner,int countDownStart)
{
if(autoPutAwayEventHandler == null)
{
autoPutAwayEventHandler = new CountDownEventHandler(owner,countDownStart);
}
return autoPutAwayEventHandler;
}
private void Dowork()
{
try
{
if (eventHandler != null&& this.owner.IsHandleCreated==true)
{
for (int i = countDownTimes; i >= 0; i--)
{
Thread.Sleep(1000);
this.eventArgs.CountDown = i;
this.owner.BeginInvoke(eventHandler, this, this.eventArgs);
}
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public void Start()
{
workThread = new Thread(Dowork);
workThread.IsBackground = true;
workThread.Start();
}
public void Stop()
{
if (workThread != null)
{
workThread.Abort();
}
autoPutAwayEventHandler = null;
}
}
(1) CountDownEventArgs.cs
public class CountDownEventArgs:EventArgs
{
private int countDown;
public int CountDown
{
get
{
return countDown;
}
set
{
countDown = value;
}
}
}