Diskuze: BackgroundWorker v knihovně DLL
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 6 zpráv z 6.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Ahoj, samozřejmě to jde. Já bych použil delegáty a při volání funkce jeden z parametrů metody by byla proměnná typu generický delegát např. Action<string> callback
volání delegáta se pak provádí callback.Invoke("pokus");
a v tomhle případě bych se vykašlal na background worker a rovnou to spustil pomocí Task třídy.
Nicméně moc nechápu to volání z vlákna, které je už dokončené...pokud je myšleno že například formulář, ze kterého byl otevřen nový thread byl mezitím už zavřen... tak to se dá při zpětném volání pomocí delegáta udělat např takto.
if this.Disposed == false
{
this.Invoke(návrathodnota); 'invoke se musí použít kvůli volání prvku
ve formuláři z jiného než main vlákna
}
snad je to trošku srozumitelný 
ted ještě koukám, že v tý rychlosti jsem to trošku pomotal
Ten kód co se spouští při
zpětném spuštění delegáta už ve formuláři tak by byl asi takto (pouze
pro winforms)
if (this.Disposed == false)
{
this.Invoke(() => this.label.text = navrathodnota); //lambda pro volání
prvku formuláře...
}
te´d už to mám snad správně
kdyby jsi měl potíž, napíšu tu proceduru včetně volání
celou... nicméně pročti tady na itnetwork články o delegátech...
Díky za radu. Delegáty jsem zatím nikdy nepoužíval a budu se na ně
muset nejprve podívat.
.
Nakonec jsem to vyřešil pomocí události, mimochodem tu jsem použil taky
poprvé
.
V té dll jsem vytvořil událost a v RunWorkerCompleted ji naplnil výsledky
toho co se zpracovalo v DoWork. Pak jsem v programu, který použil dll událost
zachytil a data co vrátila zpracoval.
Asi to nepopisuji správnými slovy, ale berte to s reservou jsem samouk
.
No událost je taky vlastně druh delegáta (v kolekci) a funguje stejně

Tak aspoň že to funguje. Backround worker vrací řízení zpět do původního vlákna. Což je pro obsluhu formuláře fajn. Kdybys to chtěl dělat jen pomocí task nebo si spustit thread ručně, tak nezapomeň volat prvky formuláře pomocí invoke. Usuzuji používáš winforms podle toho volání labelu
Jojo ve všem máš pravdu, používám VB.NET a winforms.
Měl jsem podezření, že ty události mají s delegáty dost společného.
Původně jsem se rozhodovat mezi thread a BackgrounWorkerem a ten druhý to
vyhrál. Dobře se s ním pracuje a není to tolik náchylné na moje chyby z
neznalosti a blbosti.
Ještě jednou díky.
Zobrazeno 6 zpráv z 6.