Předání parametrů jinému vláknu   zodpovězená otázka

VB.NET

Zdravím, chtěl jsem mojí aplikaci upravit tak, aby jedna časově náročnější operace (export záznamů do excelu) probíhala ve vlastním vlákně. Narazil jsem zde na problém. Proceduru kterou provádím export volám se 2 parametry. Spouštěl bych ji přes threading.ParameterizedThreadStart ale pochopil jsem, že takto jde předat pouze jeden parametr typu object. Je nějáká možnost jak v novém vlákně spustit proceduru kterou je třeba volat s více než jedním parametrem? Nebo jsem to pochopil špatně?

Četl jsem na tomto vebu článek o vláknech ale tam je popisován asi trošku jiný případ.

Přiznám se že v práci s vlákny zatím tápu, ale považuji za nutnost si ji osvojit.

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

A ja bych se jeste zeptal kdyz uz tu je toto tema. Zdali je lepsi pouzit zkusob new thread nebo pres komponentu backgroundworker. Druhy zpusob je o dost jednodusi, ale asi ma svoje nevyhody tusim.

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

Záleží k čemu chcete vlákno použít. System.Threading.Thread je vlákno pro obecné použití, nehodí se na případy kde je potřeba komunikace s uživatelským rozhraním.

System.ComponentModel.BackgroundWorker je vlákno optimalizované pro použití ve Windows Forms, tedy u věcí, kde je potřeba komunikovat s uživatelským rozhraním (například aktualizace průběhu operace). BackgroundWorker má automaticky zajištěnou synchronizaci při komunikaci s uživatelským rozhraním.

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

Ten ParameterizedThreadStart má jako parametr Object, což je mrzuté. Nechápu proč nezvolili například ParamArray, ale nejspíš to bude mít nějakou souvislost s kompatibilitou CLS. Máte několik možností. Můžete například předat pole typu Object, kde každý prvek pole bude představovat požadovaný parametr, který se v dané metodě rozdělí a přetypuje. Nebo můžete mít parametry nadefinované jako Private na úrovni třídy, kde na ně bude metoda vidět.

Toto chci podrobně rozebrat ve svém dalším článku na téma vícevláknové programování, který mám bohužel ještě rozepsán z důvodu nedostatku času.

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

Děkuji, zkusím tu možnost s tím zaboxování do objectu i když nevím jestli to v tomto případě bude použitelné. Jeden parametr je totiž proměnná typu boolean a druhý parametr je datatable. Spíš si počkám na pokračování seriálu abych se o tom dozvěděl něco více.

Díky:)

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