c#中多線程寫DataGridView出現捲軸導致程式卡死(無響應)的解決辦法

來源:互聯網
上載者:User

因為寫的程式涉及到多線程維護一個DataGridView,然後蛋疼的發現經常卡死。。。一開始以為是讀寫衝突的原因,然後就加了鎖,問題依舊。。。然後發現每次出現捲軸的時候程式才會無響應,所以感覺應該是捲軸出現問題。。。

網上說用Invoke就可以解決問題,試了一下,可能是我使用的方法不對,還是沒有解決問題-_-||

最後使用InvokeRequired解決的。。。

因為我的修改DataGridView的代碼是寫在表單裡面的,so。。。

        private static object obj = new object();        private delegate void ChangeFunction(PackageMessage pm, string Message);        public void AddWarning(PackageMessage pm, string Message)        {            if (dgv.InvokeRequired)            {                ChangeFunction c = new ChangeFunction(AddWarning);                this.Invoke(c, new object[] { pm, Message });            }            else            {                lock (obj)                {                    DataRow dr = MessageDT.NewRow();                    dr[0] = pm.GetSendTime().ToString();                    dr[1] = pm.GetSourceIP().ToString() + ":" + pm.GetSourcePort().ToString();                    dr[2] = pm.GetDestinaionIP().ToString() + ":" + pm.GetDestinationPort().ToString();                    dr[3] = Message;                    MessageDT.Rows.Add(dr);                }            }        }

說明一下 dgv是一個DataGridView的對象,一開始以為綁定一個DataTable dt會好些,結果發現沒用。。。然後也沒刪-_-||

加InvokeRequired就行了,lock的那個沒加貌似也沒出問題,但是為了安全起見我就加上了。。。

在else裡面,或者是在lock裡面(如果你加鎖的話)寫功能代碼,if的裡面形式都差不多,就是參數應該不太一樣吧~


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.