WinForm中非同步重新整理表單

來源:互聯網
上載者:User

原帖地址:

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();                }            }        }

 詳細過程晚上補.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.