1 / 37

Programowanie urządzeń mobilnych – wykład IV

Programowanie urządzeń mobilnych – wykład IV. KIS Paweł Fiderek. Zdarzenia. public event EventHandler<EventArgs > Bang;. Bang( this , EventArgs.Empty );. Obsługa zdarzeń. NullReferenceExcepion. if (Bang != null) Bang(this, EventArgs.Empty );. EventHandler < EventArgs > temp = Bang;

Download Presentation

Programowanie urządzeń mobilnych – wykład IV

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programowanie urządzeń mobilnych – wykład IV KIS Paweł Fiderek

  2. Zdarzenia public eventEventHandler<EventArgs> Bang; Bang(this, EventArgs.Empty);

  3. Obsługa zdarzeń NullReferenceExcepion. if (Bang != null) Bang(this, EventArgs.Empty);

  4. EventHandler<EventArgs> temp = Bang; if (temp != null) temp(this, EventArgs.Empty); EventHandler<EventArgs> temp = Bang; if (temp != null) { var list = ev.GetInvocationList(); foreach (EventHandler<EventArgs> d in list) { try { d.Invoke(this, EventArgs.Empty); } catch (Exception) { } } }

  5. Wyjatki Wyjątki maja następujące własności: • wyjątki to typy, które dziedziczą z klasy System.Exception, • wyjątki, które mogą być zgłaszane należy objąć sekcja try, • wyjątki są zgłaszane przez stosowanie słowa kluczowego throw, • w momencie zgłoszenia wyjątku, kontrola sterownia jest przekazywana do pierwszej • obsługi wyjątku określonej słowem catch,

  6. jeśli nie ma obsługi zgłoszonego wyjątku, program zostaje zatrzymany i wyświetlany jest komunikat o błędzie, • nie należy przechwytywać wyjątku, który nie jest możliwy do obsłużenia i wprowadzenia, poprzez to aplikacja przechodzi w stan nieokreślony. • W przypadku przechwycenia System.Exception najlepiej zgłosić ten wyjątek ponownie na końcu bloku catch, • warto w bloku wyjątku podawać nie tylko typ wyjątku ale ta reprezentująca wyjątek może dostarczyć dodatkowych informacji o powodach wystąpienia sytuacji krytycznej,

  7. obiekty wyjątku zawierają szczegółowe informacje o błędzie, min. stan stosu wywołań oraz tekstowy opis błędu, • kod w sekcji finally jest wykonywany nawet w przypadku zgłoszenia wyjątku, blok finally warto stosować do zwalniana użytych zasobów, np.: zamykania otwartych strumieni i plików, • wyjątki zarządzane w platformie .NET są implementowane z użyciem struktury wyjątków Win32/Win64, jednak nie można ich traktować jako wyjątków systemowych.

  8. try { … } catch(nazwa_wyjątku1) { … }

  9. catch(nazwa_wyjątku2) { … } finalny { … }

  10. class Pokaz { public staticvoidMain() { int[] tablica = newint[10]; try { for (int i = 0; ; i++) { tablica[i] = i; Console.WriteLine(i); }} catch(IndexOutOfRangeException) { Console.WriteLine(„Nastąpiło właśnie przepełnienie indeksu”); }}}

  11. Najczęstsze przyczyny rzucanych wyjątków • ArraryTypeMismatchException – Typ wartości jaki chcemy przypisać jest niezgodny z typem docelowym • DivideByZeroException – Próba dzielenia przez zero • IndexOutOfRangeException – Przekroczenie indeksu • InvalidCastException – Niepoprawne rzutowanie w czasie rzeczywistym • OutOfMemoryException – Porażka wywołania new z powodu braku wolnej pamięci • OverflowException – Arytmetyczne przepełnienie

  12. Delegacje • Bardzo często spotkamy się w naszych programach z sytuacją, w której nasz program wykonuje jakieś działanie, ale nie wie jakich obiektów a nawet metod ma w tym celu użyć. Na przykład: naciśnięcie przycisku ma poinformować inny obiekt, że przycisk został przyciśnięty. Ale jaki to obiekt? Nie wiadomo, dlatego najlepszym rozwiązaniem jest połączenie tego przycisku z delegatem, który następnie w czasie wykonywania się programu wywoła odpowiednią metodę. • Możemy powiedzieć więcej, delegacje i zdarzenia są ściśle powiązane ze sobą, ponieważ delegat potrafi obsługiwać zdarzenie.

  13. Konstrukcja delegacji public delegatetypname(params); Typ - typ zwracanej przez delegaturę wartości np. in, string lub void; Name - nazwa delegacji wykorzystywana potem do jej wywołania; Params – parametry delegatury, muszą być zgodne z parametrami funkcji której delegacja dotyczy;

  14. Delegacje – przykład użycia public classDelegaty { public delegateintMojDelegat(int a, int b); public intDodaj(int a, int b) { return a + b; }

  15. public intOdejmij(int a, intb) { return a - b; } public intPomnoz(int a, int b) { return a * b; } public int Podziel(int a, int b) { return a / b; } }

  16. classGlowna { staticvoidMain() { Delegaty d = newDelegaty(); Delegaty.MojDelegat dodawanie = newDelegaty.MojDelegat(d.Dodaj); intwynikDodawania = dodawanie(4, 6); System.Console.WriteLine("Wynik dodawania wynosi: {0}.", wynikDodawania.ToString());

  17. Delegaty.MojDelegat odejmowanie = newDelegaty.MojDelegat(d.Odejmij); intwynikOdejmowania = odejmowanie(22, 11); System.Console.WriteLine("Wynik odejmowania wynosi: {0}.", wynikOdejmowania.ToString()); ……………………………………………………………………… //analogicznie dla mnożenia i dzielenia }

  18. Delegacje zdarzeń public delegatevoidEventHandler(objectsender, EventArgs e); public classPrzycisk { public eventEventHandler Klikniecie; }

  19. Wątki w Windows Mobile usingSystem.Threading; …………………………. privatevoidproc() { ……………. } ……………… Threadname= newThread(proc); ……………………..

  20. Klasa Thread - właściwości • IsAlive • IsBackground • IsThreadPoolThread • ManagedThreadId • Name • Piority • ThreadState

  21. Klasa Thread - metody • Abort() • Interrupt() • Join() • Start()

  22. Klasa Thread - właściwości statyczne • CurrentContext • CurrentPrincipal • CurrentThread

  23. Klasa Thread - metody statyczne • BeginCriticalRegion() • EndCriticalRegion() • GetDomain() • GetDomainID() • ResetAbort() • Sleep() • SpinWait() • VolatileRead() • VolatileWrite()

  24. Klasa Thread - Typ wyliczeniowy ThreadState • Aborted • AbortRequested • Background • Running • Stopped • StopRequested • Unstarted • WaitSleepJoin

  25. Priorytet wyjątków • Highest • AboveNormal • Normal • BelowNormal • Lowest

  26. Zastowanie teorii w praktyce - przykłady

More Related