BackgroundWorker   zodpovězená otázka

VB.NET, Threading

Zdravím, snažím se udělat jednu aplikaci a potřebuju, aby se po stisknutí tlačítka spustila jiná trida ? rikam to spravne?

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Zde potrebuju spustit BackgroundWorker1_DoWork

    End Sub

   Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
   'Co se ma udelat na pozadi je zde
    End Sub

Zkoušel jsem napsat BackgroundWorker1_DoWork() - nefungovalo to

Všem děkuji za odpovědi

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

Taktéž jsem začátečník, ale pokusím se poradit, pokud napíšete do kodu tlačítka BackgroundWorker1. zobrazí se seznam použitelných parametrů např. RunWorkerAsync atd. mělo by jen stačit vybrat tu pravou funkci.


    Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button14.Click

        BackgroundWorker1.RunWorkerAsync()

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

Myslím, že nechcete spustit jinou třídu, třída je totiž něco úplně jiného. Chcete spustit nějaký kód v jiném vlákně, aby se prováděl nezávisle na "hlavním programu".

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

Dobrý den.

V mé aplikaci bych chtěl použít dvě vlákna. Hlavní vlákno by provádělo SQL příkaz do databáze, zatímco ve vedlejším vlákně by mi přiskakovaly políčka na progressbaru, aby uživatel věděl, že aplikace "nezamrzla". Rozsah progressbaru by byl přesně na dobu, než by databáze vyhlásila "command timeout".

Znamená to tedy, že hlavní vlákno by "stálo na místě" tzn. čekalo by odezvu od databáze a zároveň vedlejší vlákno by s pomocí Timeru zvyšovalo hodnotu progressbaru.

Nevím jestli by bylo možné toto řešit pomocí "backgroundworkeru".

Taky mi není jasné, jestli je možné aby obě vlákna běžela přesně paralelně, nebo je to tak, že chvíli běží jedno a pak zase druhé.

O multithreadingu je napsáno hodně, ale pro začátečníka je problém se v tom zorientovat.

Předem děkuji za rady.

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

Nesmysl. Řešením by bylo udělat ProgressBar ve stylu Marquee (běžící skupina obdélníčků jako při startu Windows) který není třeba aktualizovat pomocí Timeru ani v samostatném vlákně (vytvářet nové vlákno které slouží pouze pro aktualizaci uživatelského rozhraní je hloupost) a metodu SQL dotazu spustit asynchronně (viz. IAsyncResult). Při dokončení asynchronní operace by se zavolal delegát potřebné metody a v případě vypršení Timeoutu by se ošetřila vyjímka.

To že dvě vlákna jedné aplikace poběží skutečně paralelně je velice malá pravděpodobnost, nicméně možné to je (pokud máte dvou nebo více jádrový procesor). Každému vláknu je přidělen určitý strojový čas po jehož uplynutí je vlákno "zmrazeno" v aktuálním stavu a pokračuje se v něm když na něj zase přijde řada. Vzhledem k tomu, že vlákno může být "zmrazeno" uprostřed vykonávání nějaké operace, tento stav je právě zdrojem největších problémů v asynchronním programování.

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

Moc tomu nerozumím. Mám stejný problém - z aplikace volám nějaký

exec dbo.sp_neco

ten trvá dlouho a mezitím chci zobrazit progressbar - klidně ve stylu Marquee. Ale nedokážu docilit jeho rozpohybování.

Nebyl by nějaký příklad?

Děkuji.

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

Zkuste příště přemýšlet a vymyslet název tématu, který jasně a stručně vystihne, na co se ptáte. Název Poradte zacatecnikovi nikomu neřekne, co vlastně chcete.

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