2011-07-08 149 views
0

Addressof語法我使用該委託來調用我的梅索德:沒有委託

Private Delegate Sub NoArgDelegate() 



Dim dl As New NoArgDelegate(AddressOf MyLoad) 
Me.Dispatcher.BeginInvoke(dl, Windows.Threading.DispatcherPriority.ContextIdle) 


Private Sub MyLoad() 
End Sub 

有沒有辦法做到這一點沒有我NoArgDelegate?

感謝

回答

1

由於您使用WPF中,Action代表應該可用。所以你不需要定義你自己的委託。

+0

謝謝。你能在VB.Net中做一個例子嗎?我剛剛發現:http://msdn.microsoft.com/en-us/library/ms591596%28v=vs.85%29.aspx – goldengel

+0

對不起,我想我可能一直在回答你的問題的不同方面。我回答了你的問題,不使用你的'NoArgDelegate'委託。你應該可以使用'Action'來代替它。但是關於標題中的問題,在使用現有方法時不必指定委託類型,這是不可能的。由於可能有許多不同的重載,所以方法名稱被認爲是一個方法組。您必須指定應使用哪個委託,以便編譯器知道如何處理它。 –

+0

雖然Lambda表達式有任何方法嗎? – goldengel

0

那麼你可以使用MethodInvokerAction而不是創建自己的委託:)但是,我認爲你真正要問的是當你打電話BeginInvoke時需要明確指定委託類型。

問題是Dispatcher.BeingInvoke需要任何委託,所以編譯器將不知道要將AddressOf MyLoad轉換爲什麼。

你可以添加你自己的擴展方法,雖然它有一個參數Action - 我相信這會讓你調用它,而不必在調用代碼中明確指定委託。

+0

謝謝喬恩。只是想知道如何看待Google搜索。你能在VB.Net中做一個例子嗎?我剛剛發現:http://msdn.microsoft.com/en-us/library/ms591596%28v=vs.85%29.aspx – goldengel

+3

@goldengel:我現在沒有時間去做。我建議你自己去,然後編輯你的問題,你有多遠...... –

相關問題