Rozdělení programu do vláken   zodpovězená otázka

VB.NET

Zdravím, četl jsem váš článek o TCP kreslícím prkně a zaujala mne zmínka o příkazu Invoke a rozdělení do vláken. Mám přesně ten ptoblém o čem jste se zmiňoval v článku. Můj program je napsán pro porovnání dvou excel tabulke dost náročná operace (někdy to trvá i hodinu) takže mám zatuhlé hlavní okno a nejde jsím hýbat schovávat do lišty atd. Jak to provést procedůra porovnání běžela na jednoum vlákně a hlavní formulář na druhém.

Díky za odpověď

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Otázkou je, jestli jsou na toto zrovna vlákna vhodná. Pokud to má běžet jako operace na pozadí a v hlavním okně mají jít dělat jiné věci, pravděpodobně se vlákna budou hodit.

Pokud ale během porovnávání zakážete práci s ovládacími prvky v okně, aby vám uživatel během operace nezměnil to či ono a nerozhodil to, vlákna nejsou potřeba. Předpokládám, že tabulky porovnáváte v nějakém cyklu, stačí tedy v každém kroku cyklu volat Application.DoEvents. Tím dáte na pár milisekund prostor systému, aby zareagoval na události v okně (minimalizace, překreslení atd.). Stačí takhle?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jo super to úplně stačí

Moc díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Není zač.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ten příkaz funguje super ale když chci jěště navíc udělat nějakou akci např. zastavit průběh porovnání bude to asi lepší řešit těmi vlákny že?

jen mě zajmá jak řeknu volané prceduře ty jsi druhé vlákno a hlavní formulář poběhí na hlavním vlákně.

Díky za odpověd

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud chcete přerušit porovnávání (a používáte Application.DoEvents), nejlepší je asi udělat si přímo ve formuláři nějakou proměnnou typu Boolean a po zavolání Application.DoEvents ještě zkontrolovat, jesli není True. Pokud je, ukončit proceduru příkazem Exit Sub. Na formulář samotný si potom dejte tlačítko Zastavit a při kliknutí na něj nastavte hodnotu této proměnné na True. To je asi nejjednodušší řešení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback