2017-07-18 44 views
0

我要顯示工具提示一個線程在這裏不工作是一個代碼,我寫它的做工精細的無螺紋工具提示中的線程

private sub button_click(sender as object,e As eventargs) 

Dim th As New Thread(Addressof test) 
th.start() 

' tooltip.show('test',label1,1000) <--- this line work fine if i uncomment 

End Sub 

sub test() 
tooltip.show('test',label1,1000) 
End sub 
+3

你爲什麼會做這樣的事?工具提示是UI的一部分。你爲什麼試圖在UI線程以外的任何線程上操作UI?這被稱爲UI線程的原因。 – jmcilhinney

回答

0

你不能從其他線程的UI控件工作,比線程他們是創建於。這在所有語言和所有操作系統中都是如此。

您必須調用可在正確的線程:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim th As New Thread(AddressOf test) 
    th.Start() 
End Sub 
Sub test() 
    BeginInvoke(Sub() 
       ToolTip1.Show("test", Label1, 1000) 
       End Sub) 
End Sub 
+0

檢查[**'InvokeRequired'屬性**(https://msdn.microsoft.com/en-us/library/system.windows.forms.control.invokerequired(v = vs.110) ).aspx),因爲在不需要時調用_是浪費資源並導致額外開銷。 –

+0

這個答案確實需要解釋一下,在什麼情況下立即調用回UI線程是有用的。否則這種方法是完全浪費時間和資源。換句話說,爲什麼不直接在click事件上顯示工具提示並避免創建新線程。 – Enigmativity

+0

我沒有使用InvokeRequired,因爲我想盡可能簡單。而更多的東西只會混淆OP。所有關於爲什麼會這樣解釋 - 儘可能簡單。 –