winform 操作實踐

2022-09-24 03:51:10 字數 2211 閱讀 9924

想要達到的狀態是:點選開始按鈕,進度條跑完之前,資料表資料瘋狂的顯示變化,進度條也一直更進,且form表單拖動不卡頓,像德芙一樣絲滑。

點選開始按鈕,label 出現字型提示

1 private void btnstart_click(object sender, eventargs e)

2 5 public void loaddata()

6

button 可以操作lable 控制項,但為啥子呢?接下來操作出現假死,form 表單拖不動

1  private void btnstart_click(object sender, eventargs e)

2 5 public void loaddata()

6 ,剩餘量:,完成比例:%", currentindex, maxindex - currentindex,

15 (convert.todecimal(currentindex) / convert.todecimal(maxindex) * 100).tostring("f0"));

16 datarow dr = dt.newrow();

17 dr["id"] = currentindex;

18 dr["name"] = "connor";

19 dr["age"] = "32";

20 dt.rows.add(dr);

21 }

22 }

from 拖不動,我們來加乙個執行緒,主線程管窗體,子執行緒做顯示的任務

1  private void btnstart_click(object sender, eventargs e)

2 6 public void loaddata()

7 ,剩餘量:,完成比例:%", currentindex, maxindex - currentindex,

16 (convert.todecimal(currentindex) / convert.todecimal(maxindex) * 100).tostring("f0"));

17 datarow dr = dt.newrow();

18 dr["id"] = currentindex;

19 dr["name"] = "connor";

20 dr["age"] = "32";

21 dt.rows.add(dr);

22 }

23 }

不出所料,系統直接報錯,button開啟的執行緒不能訪問label.text ,報錯截圖

報錯不可怕,真正可怕的是放任不管,若干年後還是得回頭弄明白

1. button 可以操作label 顯示?

親可知,winform主線程,從main開始,button點選事件是主線程操作,label修改text也是主線程操作。

2.ui介面假死,拖不動,那是主線程太忙了,又要在後台運算操作,還得操作form介面移動,忙死了,也煩死了。

3.button 新建執行緒不能操作label, 子執行緒只能幹自己任內的事,label 和button 平級,label是主線程才能操作的,label畢竟是主線建立的,子執行緒就不要瞎操這個心啦!

解決方法

子執行緒調動label ,需要搬來委託,委託主線程來操作label,相當於搬救兵啦。

1  public void setlabelinfo(string strinfo)

2 );

8 }

9 else

10

13 }

來看看啊,label 先看看這個執行緒是不是建立我的執行緒,label只聽主線程呼叫,其他執行緒就別有想法了

其他子執行緒呼叫label ,沒有這個許可權啊,委託control 來呼叫,那麼自然能展示順利嘍。

action 泛型委託  沒必要每個委託都自己寫吧

WinForm串列埠操作

生產中經常會使用到串列埠來處理資料,在此做一下記錄 串列埠選擇框 波特率選擇框 開啟 關閉按鈕 大致如下 注意 紅色的表示的是串列埠開啟的狀態,為了便於區分當前串列埠狀態。紅色表示關閉,綠色表示開啟 自動載入獲取串列埠 private void getcomlist if cbbcom.proper...

C 操作CAD 呼叫winform

個人認為用命令操作cad會比較便捷,但是鑑於好多人喜歡通過滑鼠點選的方式操作cad,在此講一下如何呼叫winform。前期準備請看上篇文章。1 在新建好專案並引用介面dll的前提下,新建乙個winform或者使用者控制項。直接呼叫winform會在電腦上直接生成乙個獨立於cad的窗體,我感覺很不舒服...

winform 跨執行緒操作控制項

當進行winform的開發時,經常遇到用時比較久的操作,在傳統的單執行緒程式中,使用者必須等待這個耗時操作完成以後才能進行下一步的操作,這個時候,多執行緒程式設計就派上用場了,將這個耗時的操作放到乙個新的子執行緒中,啟動子執行緒完成操作,而不影響主線程的正常工作。那麼這個時候問題來了,當在子執行緒中...