Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
S Sample_Solutions
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • OOP
  • Sample_Solutions
  • Wiki
  • Cv10

Cv10 · Changes

Page history
Create Cv10 authored Nov 26, 2019 by Ing. Lukáš Hruška's avatar Ing. Lukáš Hruška
Show whitespace changes
Inline Side-by-side
Showing with 49 additions and 0 deletions
+49 -0
  • Cv10.md Cv10.md +49 -0
  • No files found.
Cv10.md 0 → 100644
View page @ a615f29a
# Cvičenie 10
Dnešnou úlohou bude vytvoriť nástroj na zobrazenie aktuálneho počasia.
Tabuľka je dostupná na http://www.shmu.sk/sk/?page=59
(vytvorte si nový projekt)
## HTTP Get & Singleton
Vytvorte si triedu Weather, nech táto trieda obsahuje informácie reprezentujúce jeden záznam z tabuľky.
Vytvorte si rozhranie IHtmlProvider, toto rozhranie nám bude slúžiť dnes len pre jednu triedu - ktorá cez HTTP načíta stránku a predá ju ďalej (v praxi by mohlo túto stránku získať aj inak, napr. načítať z disku, prípadne použiť iný protokol ako HTTP).
Nech toto rozhranie obsahuje jednu metódu `string LoadHtml(string url)`
Na tomto mieste by sa žiadalo použiť async programovanie, jeho problém je však, že ak ho raz použijete, už sa bude ťahať cez celý kód. O tom, ako to si môžete prečítať viac tu: [async concepts](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/)
V rámci cvičenia si to ale ukážeme cez klasické vlákna.
1. Vytvorte si triedu WebPageProvider, nech táto trieda implementuje IHtmlProvider
2. Implementujte rozhranie. [Ako na HTTP](https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=netframework-4.8) - použite GET
3. Nech táto trieda implementuje [návrhový vzor Singleton] (https://en.wikipedia.org/wiki/Singleton_pattern):
1. (všetko v rámci triedy)
2. potrebujeme explicitne deklarovaný _private_ konštruktor
3. potrebujeme _private static_ referenciu na objekt danej triedy
4. `public static IHtmlProvider GetInstance()` nech pri prvom zavolaní vytvorí nový objekt a uloží ho, potom vráti. Pri ďalších zavolaniach nech už len vráti tento vytvorený objekt.
4. Vytvorte triedu WeatherParser s jedným parametrickým konštruktom - vstupom bude parameter typu IHtmlProvider. Pridajte metódu `void Parse(string source, Form form, EventHandler handler)` kde získate z IHtmlProvider stránku a pomocou Regexov nájdite a rozdeľte získanú tabuľku a vytvorte z nej zoznam s aktuálnym počasím v daných staniciach.
5. Pridajte si event, ktorý sa zavolá, keď bude všetko pripravené, aby aktualizoval UI prvky
1. Tento raz však budeme pracovať s dvoma vláknami, čo spôsobuje jeden problém: Zmena UI elementov je možná len v hlavnom vlákne, musíme teda nejakým spôsobom zabezpečiť, aby sa kód vykonal v správnom vlákne.
6. Pridajte na formulár tlačidlo Load, ktoré zabezpečí načítanie a parsovanie v osobitnom vlákne
```csharp
//method signature
object Control.Invoke(Delegate method, params object[] args)
//použitie v prípade volania z iného vlákna
form.Invoke(handler, sender, arg1, arg2, arg3, arg4);
```
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/params
Použite ListBox na zobrazenie menu na výber mesta. Ako na to: https://www.c-sharpcorner.com/UploadFile/mahesh/listbox-in-C-Sharp/
Zabezpečte zobrazenie pre dané mesto pomocou vhodných prvkov. Pri zmene výberu nezabudnite aktualizovať.
Ako bonusovú úlohu sa pokúste v rámci nového projektu urobiť to isté, ale použite `async / await` toto si bude vyžadovať zmeny v štruktúre kódu, v tomto prípade ale nepotrebujeme explicitne použit vlákna.
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/
\ No newline at end of file
Clone repository
  • Assignment part 1
  • Assignment part 2
  • Assignment part 3
  • Cv10
  • Cv11
  • Cv4
  • Cv5
  • Cv7
  • Cv8
  • Cv9
  • Requirements
  • Home