2011-08-10 13 views
0

我的應用程序繪圖值來自電子設備。它在一秒鐘內繪製了10個值。在獲取下一個值之前,它等待100ms。等待由Thread.Sleep(100);給出這很大一部分工作正常。如何在線程中運行mouse_move事件...?

我在MouseMove事件中顯示鼠標位置。但爲了表明立場,我需要延遲一段時間。

所以我想避免這種延遲。我試圖在線程中運行MouseMove事件,如new Thread(chartControl1_MouseMove).Start();。但它提供了以下錯誤:

  1. 爲 的最佳重載的方法匹配「System.Threading.Thread.Thread(System.Threading.ThreadStart)」有一些無效的參數。
  2. 參數 '1':不能從轉換 '方法組' 到 'System.Threading.ThreadStart'

任何建議... ???

+0

你是什麼意思的「我顯示鼠標位置」?這是否意味着您正在獲取鼠標位置並將其繪製到圖表中? – yas4891

+0

類似的問題,相同的錯誤(請參閱註釋),相同的解決方案:http:// stackoverflow。COM /問題/ 5155979/C線程方法 – Abel

回答

0

MouseMove事件需要一些參數。但是線程開始並不傳遞它們。它假定該方法具有void params。

0

這是因爲你的方法chartControl1_MouseMove我拿聲明爲

public void chartControl1_MouseMove(object sender,MouseEventArgs e) 

不能轉換到一個ThreadStart委託這需要的

public delegate void ThreadStart() 

形式,使這項工作,你會需要創建一個自己的方法與虛擬返回類型和沒有參數像

private void foo() 

,改變你的代碼行:

new Thread(foo).Start(); 

這樣,它應該至少編譯。然後您必須在foo方法內實現所需的行爲。

0

您正在使用需要參數的方法。要麼改變方法有沒有參數,或者使用工項目:

ThreadPool.QueueUserWorkItem(o => Method(m)); 

你需要你的方法chartControl1_MouseMove(object sender, MouseEventArgs e)轉換的東西,包含一個參數,也可以恢復使用任務來代替。通常,將自己的工作代碼放在自己的方法中並讓事件成爲事件(如果在表單中已經被異步調用),通常會更好。然後你從事件中調用工作方法(排隊)。

在線程上使用線程池有優勢,see this post

0

使用parameterizedThreadStart或更好地將mouse_move處理程序的主體移到某個其他方法並在線程上運行該方法。

相關問題