原帖地址:
http://topic.csdn.net/u/20111108/09/07216bf6-d888-43c5-9192-87ffa4b4892c.html
public class Flag { public static bool IsOpen { set; get; } public static object lockObj = new object(); }
public delegate void FunDelegate(); public delegate void SetValue(int i); public delegate void CloseForm(); private void Form3_Load(object sender, EventArgs e) { Flag.IsOpen = true; } private void button1_Click(object sender, EventArgs e) { FunDelegate fundelegate = new FunDelegate(FunProc); AsyncCallback callback = new AsyncCallback(CallBack); IAsyncResult result = fundelegate.BeginInvoke(callback, "处理结束"); } public void CallBack(IAsyncResult result) { MessageBox.Show(result.AsyncState.ToString()); } public void FunProc() { for (int i = 0; i < 5000; i++) { Thread.Sleep(100); if (Flag.IsOpen && this != null && !this.IsDisposed) { lock (Flag.lockObj) { if (Flag.IsOpen && this != null && !this.IsDisposed) { this.Invoke(new SetValue(SetListBox), i); } else { break; } } } else { break; } } } public void SetListBox(int i) { if (Flag.IsOpen && this != null && !this.IsDisposed) { listBox1.Items.Add(i); } } private void Form3_FormClosing(object sender, FormClosingEventArgs e) { if (Flag.IsOpen) { Flag.IsOpen = false; if (Monitor.TryEnter(Flag.lockObj, 2000)) { Monitor.Exit(Flag.lockObj); } else { e.Cancel = true; new Thread(() => { Thread.Sleep(1000); this.Invoke(new CloseForm(() => this.Close())); }).Start(); } } }
详细过程晚上补.