国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

發現一個.Net中動態加載控件時關于焦點方面的Bug

2024-07-10 13:04:10
字體:
來源:轉載
供稿:網友
今天寫一個系統框架的時候用到了動態加載,調試的時候發現程序經常會出現死鎖的情況,而且死鎖的時候還會打開一個“windowsformsparkingwindow”后臺進程,跑到網上查了半天關于windowsformsparkingwindow的資料,結果中文的一篇沒找到,蠅文的倒有幾篇,對著金山詞霸費了九牛二虎之力還沒看出個道道來。后來干脆新建了一個項目,只寫了幾行代碼,結果運行的時候發現還是會有死縮的情況:

1、新建一個windows應用程序

2、添加一個usercontrol,命名為usercontrol1,

3、在usercontrol1中添加一個控件,隨便什么控件,只要是能獲得焦點的都行(label、panel等不行)

4、在usercontrol1.cs中添加一個方法test:

public void test()
{
messagebox.show("this is a test!");
}

5、在form1.cs中添加一個類級變量:private usercontrol1 curobj;

6、在form1中添加一個panel,命名為panel1

7、在form1中添加一個菜單,并添加兩個菜單項,命名為menuitemadd和menuitemmsg;

8、在菜單項menuitemadd的click事件中添加代碼:

panel1.controls.clear();

curobj = new usercontrol1();

panel1.controls.add(curobj);

9、在菜單項menuitemmsg的click事件中添加代碼:

if (curobj != null)

curobj.test();



運行程序,請依次點擊menuitemadd、menuitemmsg、menuitemadd、menuitemmsg;注意:在這些操作中間不要點擊其他地方,發現沒有,在第二個messagebox對話框彈出之后程序死了,用alt+tab后發現有一個名為“windowsformsparkingwindow”的東西在列表中。

后來發現在第一次點擊menuitemmsg彈出對話框之后點一下usercontrol1或者在form1中添加一個可以獲得焦點的控件以后程序都不會死,或者在 panel1.controls.add(curobj);后面加了一句curobj.focus();之后問題也可以解決,我想應該是在第二次動態加載的時候由于先把panel1中的對象銷毀了,窗體的也就沒有焦點了,在第二次彈出對話框之后,系統找不到當前活動窗體的焦點了,所以程序會死,而當我們鼠標點擊一下或者在程序中置一下之后就不會有這樣的問題了。

想來想去,問題雖然解決了,總覺得雖然我在寫程序的時候的確應該在動態加載對象之后就設焦點,但就算我遺漏了,.net再怎么說也不應該什么都不處理就讓系統死掉還弄個莫名其妙的windowsformsparkingwindow吧?至少應該幫我置一下或者拋出一個異常吧?我想這應該算是.net的一個bug吧,已經反饋給microsoft了,見http://www.mscommunity.com/communitywish/viewwish.aspx?wishid=25990,希望microsoft下一個版本能夠改掉吧。


商業源碼熱門下載www.html.org.cn

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴彦县| 沾化县| 新干县| 红桥区| 齐齐哈尔市| 玉山县| 郯城县| 陈巴尔虎旗| 陕西省| 华容县| 嫩江县| 会泽县| 延庆县| 军事| 阿图什市| 阿拉善左旗| 闽侯县| 尤溪县| 中宁县| 兴仁县| 土默特右旗| 温州市| 敦化市| 双鸭山市| 永宁县| 大新县| 凤阳县| 凤凰县| 青川县| 色达县| 泗洪县| 黑水县| 电白县| 崇文区| 纳雍县| 苗栗县| 满城县| 逊克县| 浦县| 阿拉善盟| 新沂市|