Obsługa zdarzenia w aplikacji wielowątkowej

0

Witam
Mam problem z obsługą zdarzenia przy wykorzystaniu wielu wątków, otóż poniższy kod wyrzuca mi wyjątek wg. którego lokalne zdarzenie localMyEvent jest nullem. Mimo zastosowaniu locka i dodatkowego sprawdzenia czy zdarzenie nie jest nullem.


 try
{
                    EventHandler<FileOperationEventArgs> localMyEvent;
                    lock (this.myEventLock)
                    {
                        localMyEvent = this.fileOperationFinished;

                    }
                    if (localMyEvent != null)  
                    localMyEvent(this, new FileOperationEventArgs(FileOperationEventArgs.FileOperationType.Read));

}
catch (Exception ex)
{

               MessageBox.Show(ex.ToString());
}

Problem jest zatem najprawdopodobniej tutaj


  if (localMyEvent != null)  
// jakby inny wątek wykorzystywał zdarzenie
localMyEvent(this, new FileOperationEventArgs(FileOperationEventArgs.FileOperationType.Read));

Jednakże zdarzenie globalne jest przypisywane do zdarzenia lokalnego i blokowane przy wykorzystaniu lock'a. Na chłopski rozum wg mnie powinno być ok.

Pozdrawiam

1

lock jest zbedny a nawet szkodliwy w tym wypadku. kod ponizej wystarczy aby ten kawalek byl thread safe.


                    EventHandler<FileOperationEventArgs> localMyEvent = this.fileOperationFinished;
                    if (localMyEvent != null)  
                    localMyEvent(this, new FileOperationEventArgs(FileOperationEventArgs.FileOperationType.Read));

problem musi byc gdzie indziej, daj blad ktory ci rzuca i calosc kodu

0

Dobrze jest poznać nową bibliotekę TPL do obsługi wielowątkowości

Helion.pl jest książka doktora Jacka Matulewskiego za kilka PLN jako e-book

http://helion.pl/ksiazki/prog[...]ki-rafal-pawlaszek,proch5.htm

mnie się podoba podobnie jak w slowie wstępnym recenzja
-> ten autor bardzo sympatyczny polski naukowiec , kochający swoją rodzinę, potrafiący dość uczciwie i interesująco opowiadać...
zgadzam się: to prawda co pisze w recenzji tej książki...

0
katelx napisał(a):

lock jest zbedny a nawet szkodliwy w tym wypadku. kod ponizej wystarczy aby ten kawalek byl thread safe.

                EventHandler<FileOperationEventArgs> localMyEvent = this.fileOperationFinished;
                if (localMyEvent != null)  
                localMyEvent(this, new FileOperationEventArgs(FileOperationEventArgs.FileOperationType.Read));

> problem musi byc gdzie indziej, daj blad ktory ci rzuca i calosc kodu

Problem usunąłem faktycznie był gdzie indziej. Dziękuje za radę z lockiem.
Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0