2009-10-13 123 views
1

我在C#中有一個datetimepicker。當我點擊它時,它會展開以顯示每月日曆,當我點擊左箭頭返回一個月時,它會更改值並調用我的活動。這個事件包含了太多的代碼來包含在這裏,但它調用了一些不用說的函數。
我遇到的問題是,當我點擊左箭頭時,它會陷入某種循環,並且在幾個月中一直下降,我無法阻止它。其中一個被調用的函數包含一個Application.DoEvents(),如果我評論說它不會卡在循環中,但我需要該命令來更新接口的另一部分。任何想法爲什麼發生這種情況?C#DateTimePicker卡在循環中

我有時可以使用此代碼複製它,有時它只是它幾次,有時它會卡在循環中。

private void DateTimePickerValueChangedEvent(object sender, EventArgs e) 
{ 
afunction(); 
} 

private void afunction() 
{ 
listView1.Clear(); 
panel1.Visible = true; 
Application.DoEvents(); 
} 
+0

這個怎麼樣?您在事件處理程序中做了太多工作,特別是如果您需要調用DoEvents ... – 2009-10-13 19:33:47

+0

爲什麼會導致問題? – 2009-10-13 19:35:55

+0

沒有DoEvents()掛起嗎? – 2009-10-13 19:44:51

回答

4

我也有同樣的問題。在我的情況下,不是調用DoEvents,而是更新Crystal Report視圖。我發現唯一的解決方法是在CloseUp事件而不是ValueChanged或TextChanged上更新我的視圖。

斯科特,你是如何最終糾正你的問題的?

+0

我終於決定只是刪除我試圖顯示的面板,它比功能性更多的美容原因,但我會給你的解決方案一試。謝謝。 – 2010-02-01 15:44:51

+1

+1 - 'CloseUp'事件解決了我在VB.NET項目中處理的問題。感謝您的回答! – Buggabill 2010-04-26 18:14:20

1

沒有看到任何代碼,請嘗試以下步驟:

  1. 註釋掉整個事件處理 來看看如何快速將其與連接到它沒什麼 運行。
  2. 取消註釋一行一次,看 哪些是造成最多 問題。
  3. 分析這些方法調用。
  4. ...
  5. 利潤!
0

你可以嘗試幾件事情。擺脫ChangedEvent內部的DoEvents。 在一段時間後(thread.sleep()?)調用一個單獨的函數內的doevents。

我知道doevents確實會導致問題,但我很少使用它。

+0

問題是我在事件開始時使面板可見。進行網絡服務調用,然後隱藏面板。我必須在panel1.visible = true之後放置DoEvents;在調用web服務時實際獲取它。 – 2009-10-13 19:58:07

0

DateTimePicker ValueChanged事件是越野車。根據此頁上的Microsoft Windows窗體小組https://connect.microsoft.com/VisualStudio/feedback/details/1290685/debugging-datetimepicker-event-hangs-vs

「DateTimePicker控件將鼠標掛鉤作爲其功能的一部分進行安裝,但是當調試程序在斷點上停止WinForms應用程序時,它允許發生死鎖碰巧得到一個鼠標消息,現在,不幸的是死鎖是DateTimePicker設計的結果,當單擊下拉菜單來顯示日曆時,鼠標鉤子被安裝,這意味着不應該在任何事件處理程序中發送斷點我們正在調查是否有可能解決這個問題,如果我們能夠提供修補程序,我們將更新此主題以提供更多信息。「