2015-11-06 41 views
1

解釋此問題的最佳方式是描述如何隨意再現問題。向表單添加UserControl時,VS2013掛起

  1. 打開在設計
  2. 打開工具箱現有的Windows窗體文件,然後單擊自定義的用戶控件
  3. 單擊窗體設計器中,將其添加
  4. VS2013掛起(不崩潰);殺VS2013並重新啓動它
  5. 開放的形式再次
  6. 重置工具箱,然後重新添加包含我的自定義用戶控件
  7. 嘗試添加控件到窗體的DLL - 它工作得很好!
  8. 關閉VS2013
  9. 打開VS2013
  10. 重複添加自定義用戶控件到窗體的任務
  11. VS2013掛

所以,這個故事的寓意是,關閉並重新打開VS2013後,任何添加自定義用戶控件的嘗試都會掛起VS2013,修復它的唯一方法是重置工具箱並重新添加usercontrol DLL;該補救措施只會持續到VS2013退出並再次啓動。

大量的谷歌搜索已經提出了關於使用第二個VS實例附加到第一個並查看拋出的異常的建議,但沒有拋出異常;應用程序只是掛起。

我發現的一件事是最密切地描述了我的問題,結果與我沒有使用的某些遠程桌面軟件有關。

有人有什麼想法嗎?我沒有嘗試重新安裝Visual Studio,因爲這代表了相當多的停機時間。最後一類的事情(我讀過一些表明它不會有幫助的東西)。

編輯:顯然有時重置/重新添加不會使它更好。

編輯:我應該提到一些額外的東西:

  • 沒有devenv.exe的,當我嘗試使用第二個VS實例 調試,所以我最終選擇WDExpress.exe
  • 特定的用戶控件是成熟的並且最近沒有變化,並且在項目中以多種形式使用
  • 問題只有在添加控件的新實例時發生;掛起而不是只是通過嘗試爲已經包含一個的表單啓動設計器而發生。
  • 最新VS2013更新可能已修復它;它現在不是在發生,我不希望在完成我的工作之前再次嘗試再現這些神。
+0

呃,我的測試工作賞金評論意味着我測試解決方案,它的工作原理...不是回答者以某種方式必須測試我的代碼:-) –

回答

0

這個問題似乎已經消失在更新VS2013到12.0.40629.0更新5隨後,通過選擇工具>擴展和更新,然後選擇左側更新發現。

它可能無法在設計器中似乎無法解釋的UserControl煽動掛起的所有情況下工作,但似乎爲我解決了問題。我把這個放在這裏(而不是刪除問題),以防我的經驗可以幫助別人。

1

懸掛Visual Studio與自定義UserControl是非常容易。一個簡單的例子是所有需要,雙擊設計表面和寫入:

private void UserControl1_Load(object sender, EventArgs e) { 
     while (true) { } 
    } 

編譯並從工具箱的頂部落下的增加的控制,並把它在窗體上。演出結束。

你可能沒有花足夠的時間使用你已經找到的指導,或者我們有堆棧跟蹤來看。附加一個調試器非常簡單,如果代碼拋出一個異常,你會領先一步。但事實並非如此,這樣的懸掛不會拋出。練習調試這個特別簡單的掛找出如何做到這一點:

  • 開始再次VS,調試>附加到進程>選擇devenv.exe的
  • 重要提示:單擊該進程列表上方的選擇按鈕。您需要選擇「調試這些代碼類型」單選按鈕並勾選「託管(v4.5,v4.0)」以及「本機」。現在單擊附加。
  • 給它加載符號文件的時間需要相當長的一段時間,特別是如果這從來沒有做過。
  • 使用調試>全部中斷。
  • 如果您是幸運那麼現在停止在導致掛起的確切語句。在這種情況下可能。然而,這是而不是保證,它也可能在devenv.exe內部運行的許多線程中的一個線程上發生故障,在調試器進入時恰好處於活動狀態。
  • 在這種情況下,您需要使用調試> Windows>線程來選擇運行UserControl代碼的線程。應該是標有「主線程」的那個。雙擊它。
  • 如果編輯器沒有切換到帶有掛起的源代碼文件,則使用調試> Windows>調用堆棧來了解掛起的發生方式。如果您需要更多幫助,請使用該跟蹤更新問題。

通常,UserControl中可導致掛起的代碼的主要候選項是其構造函數,其Load事件和其Paint事件。使用DesignMode property可避開在設計人員而不是常規流程中運行時不太可能正常工作的危險代碼。並且要小心雞與雞的問題,如果你的UserControl中有一個簡單的錯誤,那麼在你有機會像通常那樣調試它之前,它可以很容易地在設計時首先出現。禁用大塊的代碼可能是必要的,以增加錯誤,使用DesignMode到達那裏。

有一個更詳細的信息,標記爲[C++ - cli]。您必須選擇舊的調試引擎來調試C++/CLI代碼。工具>選項>調試>常規>勾選「使用託管兼容模式」複選框。

+0

devenv。當試圖連接第二個實例的調試器時,exe不是一個選項。我應該提到這一點。所以我連接到WDExpress.exe。 –

+0

我還應該補充說,這是一個成熟的自定義UserControl,它最近沒有更改過,並且用於很多現有的表單。掛起只發生在添加一個時;而不是在設計一個包含一個的現有表格時。 –

+0

這些評論對於將此Q + A向前推進非常無益。如果你只是想把你的手放在空中,並驚歎「VS臭蟲!」那麼不要打擾這一點。向我們展示堆棧跟蹤。 –