c 關於Handler得一點說明。

2021-09-05 21:31:31 字數 749 閱讀 2629

**如下:

private void toolstripbutton1_click(object sender, eventargs e)

private void picturebox1_mouseclick(object sender, mouseeventargs e)

mymap.layers.add(layerselect);

picturebox1.image = mymap.getmap();

}目的是在新加層的時候把原來的刪掉,防止太多造成不透明,但是如果是完整的選層已經做好的話,就保留下來(通過名字來刪,這樣整的選層的選層就可保留)。

問題在於在選好乙個選第二個時發現picturebox1_mouseclick函式執行了兩次,想了下 ,多點了幾次toolstripbutton1,多觸發了幾次toolstripbutton1_click函式,結果發現觸發的picturebox1_mouseclick次數更多了,原來是每次點toolstripbutton1都會註冊乙個this.picturebox1.mouseclick += new system.windows.forms.mouseeventhandler(this.picturebox1_mouseclick);

事件,而點滑鼠後註冊了幾個該事件就會觸發幾次,所以,改稱:

private void toolstripbutton1_click(object sender, eventargs e)

catch (exception ex)

}問題解決。

關於handler機制的一點見解

當handler接收到message時,會先去查詢looper物件,而looper物件會建立乙個messagequeue並且管理它。這條接收到的message會放入looper的messagequeue中,looper 通過不斷的輪詢,當獲取到message時,會將該訊息 回handler,然後ha...

關於viewWithTag的一點說明

通常我們使用viewwithtag如下情形 如果我們用了乙個父view,上面放了多個子view,每個子view都通過從0開始的tag值來進行標誌,以便於後期在像view上直接使用viewwithtag tag值來取各個子view 而在用 父view viewwithtag 0 取到的view,發現不...

Handler的一點理論分析

threadlocal是乙個執行緒內部的資料儲存類。它可以為各執行緒儲存資料,同時只能由當前執行緒獲取到儲存的資料,對於其他執行緒來說則獲取不到。它可以在不同執行緒中維護一套資料的副本,並且彼此互不干擾。一言不合上 private static threadlocalthreadlocal new ...