2013-05-19 16 views
6

Przeczytałem już kilka wątków na ten temat, ale nadal nie wiem, jak rozwiązać ten problem w moim przypadku. Pochodzę z Java i przede wszystkim nowe do C#Nie można niejawnie przekonwertować typu "System.EventHandler" na "System.EventHandler <object>" w celu ukończenia zestawu scenariuszy

chcę dołączyć słuchacza po zakończeniu animacji:

myStoryBoard.Completed += new EventHandler(onMyStoryBoardCompleted); 

oraz:

private void onMyStoryBoardCompleted(object sender, EventArgs e) 
{  
} 

I pojawia się błąd w tytule. Próbowałem:

myStoryBoard.Completed += new EventHandler<object>(onMyStoryBoardCompleted); 

Ale wtedy pojawia się:

no overload for 'onMyStoryBoardCompleted' matches delegate 'System.EventHandler<object>' 

Wygląda więc na to, że podpis nie jest kompatybilny z EventHandler <object> i nie mogłem znaleźć sposób, aby był kompatybilny, ja również don” t wiedzieć, czy to podejście jest poprawne.

czytam

Understanding events and event handlers in C#

C# Dynamic template implicit conversion error from System.EventHandler to System.EventHandler<TEventArgs>

defining event handler for Tick event of DispatcherTimer in windows 8 app

Ale nadal nie znaleźć rozwiązanie dla tego przypadku.

Z góry dziękuję.

+0

'myStoryBoard.Completed + = new EventHandler (onMyStoryBoardCompleted);' powinien zadziałać – SLaks

+0

Którą klasę StoryBoard używasz? Jeśli pochodzi od "osi czasu", słowo "Completed" powinno zostać zdefiniowane jako typ EventHandler, co oznacza, że ​​powinno się skompilować bez błędu. –

+0

Odwołuję się do storyboardu z XAML w UserControl.Resource tag – Ixx

Odpowiedz

8

Spróbuj:

private void onMyStoryBoardCompleted(object sender, object e) 
{ } 

i zapisz za pomocą rodzajowy EventHandler<object>:

myStoryBoard.Completed += new EventHandler<object>(onMyStoryBoardCompleted); 

Oczywiście, to jest sprzeczne z konwencją Framework że drugi argument do obsługi zdarzeń powinny być instancją z EventArgs (lub jego pochodną). Zakładam, że używasz innej platformy, takiej jak Windows 8 Metro, której klasa Timeline definiuje zdarzenie Completed z sygnaturą EventHandler<object>.

+0

Nie, nadal otrzymuję ten sam błąd – Ixx

+0

Czy próbowałeś używać ogólnego 'EventHandler '? Jaki błąd dostałeś? – Douglas

+0

Ach, ta kombinacja faktycznie działa! To dziwne, ponieważ podpis metody został wygenerowany przez Visual Studio. Tak, pracuję dla Metro. – Ixx