Pozastavení procedury   zodpovězená otázka

C#, VB.NET, Threading

Dobrý den.

V Backgroundworkeru zruším probíhající proceduru přes Cancelasync. Můžete mi poradit, jestli a jak je možno ji jen pozastavit?

Například aby se klikem na Button1 procedura pozastavila a klikem na Button2 pokračovala ze stejného místa, kde předtím skončila?

Předem děkuji.

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

Pokud se tam něco opakuje v cyklu, můžete pozastavení a pokračování řídit pomocí ManualResetEvent, který bude na začátku cyklu volat WaitOne a popohánět dál se bude pomocí Set.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji za radu, snažil jsem se najít na ManualResetEvent nějaký příklad na netu. Je jich tam spousta a princip se zdá být jednoduchý. Konkrétně se mi to ale pořád nedaří zprovoznit protože jsou to pro mne nové příkazy a nějaký snadno pochopitelný příklad jsem nenašel. Většinou byly v dlouhých procedurách nebo mi nefungovaly. Nešlo by uvést konkrétní příkazy?

Děkuji

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

Tak už to nepotřebuji, obešel jsem to vlastní proměnnou typu Byte a v proceduře kontroluji její hodnotu. Je to určitě jednodušší než ten ManualResetEvent. :)I tak děkuji za odpověď.

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

Jednodušší možná, ale je to zbytečně náročné na výkon. ManualResetEvent a podobné thread-synchronizační prostředky mají "optimalizované nicnedělání", které nezabírá naprosto nic. Naproti tomu například neustálá kontrola proměnné v cyklu je obrovsky náročná na procesor. V podstatě stačí někam hodit WaitOne a na tomto řádku se to zastaví dokud něco jiného nezavolá Set.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

To je mi jasné, jenže jsem bohužel nepřišel na to jak ty procedury zavolat. Při té kontrole používám sleep, takže to skontroluje jednou za vteřinu.

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

Dělat to takhle je naprostá prasárna. Nastudujte použití ManualResetEvent, později se vám to bude hodit k dalším věcem.

nahlásit spamnahlásit spam 1 / 1 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