filtrování dat v novém vlákně   zodpovězená otázka

VB.NET

Dobrý den.Na úvod bych měl upozornit, že ohledně programování teprve začínám chodit, ale ještě mám plenky. Potřeboval bych filtrovat jeden listview a výsledky přidávat do druhého. Problém nastal, když jsem si "umanul", že se takto dít nebude až po kliknutí na tlačítko, ale automaticky jak budu vybírat filr. Mno nic po pár hoďkách byly úpravy hotovy, ale "ejhle" zase nepohodlný. Filtrování zabere čas a já musím čekat než celej proběhne a já budu moct přidat další filtr. Když těch filtrů chci zadat deset, tak si pěkně počkám. Tady začíná už větší problém. Už jsem párkrát "narazil" na články s problematikou vláken(Threading) ale stále jsem je nepochopil. Po chvíli zkoumání jsem se dostal k příkladu ve kterém jsem dokázal najít že vlákno nejdřív naimportuju, pak mu přidělím nějakej kód kterej má provádět a následně ho spustím. No jaké bylo moje překvapení, že to vlastně funguje vám neumím popsat, ale chybička tam byla stále nemůžu přepisovat data v listview z jiného vlákna než ve kterém byl vytvořenej. Alespoň to mi oznámila tabulka která byla naštěstí z poloviny česká. Tak jsem znovu překopal kus programu a číslo řádkú které chci zkopírovat do druhýho seznamu jsem uložil do stringu. Z toho jsem je snadno vzal a zapsal řádky(to zabere poměrně krátký čas). Program mam nyní v tomto stádiu a i když vše (kromě problému mezi židlí a klávesnicí) tak když zadávam filtry rychleji než stíhá druhej proces přepočítávat tak cca poslední podmínku nezahrne. Teď už vážně nevím co mam dělat jak přiřadit promněnej událost "textchanged" nevím jak po ukončení vlákna přinutit program něco udělat také ne. A žádnej další šikovnej článek najít nemůžu. Takže jsem ze zoufalství začal psát tenhle sloh s nadějí, že se najde někdo ochotnej a trochu mě nakopne do sedacích svalů. Těm co vydrželi až do konce moc děkuju.

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

Zdravím,

zkuste se podívat na následující články

https://msdn.microsoft.com/en-us/library...

https://msdn.microsoft.com/en-us/library...

http://stackoverflow.com/questions/14234...

Jedná se o metodu Control.Invoke, která řekne zodpovědnému vláknu ať si to laskavě vykreslí. Jako parametr přebírá funkci kde by se měl nacházet kód, kterým manipulujete s danou Control (např. list view).

V posledním odkazu v jedné z odpovědí má autor udělanou extension metodu, která vám umožní jako parametr předat lambda expression.

R.

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

Zdravím

tady je kód jednoduché aplikace, která naplní asynchroně list view čtyřmi náhodnými čísly. Snad se poperete s C# :).

 public partial class Form1 : Form
    {
        private readonly Random _random = new Random();

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // spustí metodu (FillListView) v novém vlákně
            ThreadPool.QueueUserWorkItem(state => FillListView());
        }

        private void FillListView()
        {
            Thread.Sleep(2000); // ať jde vidět, že se to děje skutečně asynchroně

            // vygeneruj nějaká data
            var data = new[]
            {
                _random.Next(0, int.MaxValue).ToString(),
                _random.Next(0, int.MaxValue).ToString(),
                _random.Next(0, int.MaxValue).ToString(),
                _random.Next(0, int.MaxValue).ToString()
            };

            // vytvoření anonymní metody, která manipuluje s UI control (plní list view daty)
            Action uiAction = 
                () => 
            {
                listView1.Items.Clear();

                foreach (var datum in data)
                {
                    listView1.Items.Add(datum);
                }
            };

            // spustí metodu (uiAction) ve vlákně, jež control vytvořilo
            listView1.Invoke(uiAction);
        }
    }

R.

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

Děkuju moc mi to pomohlo, ale ještě jsem narazil na to, že když potřebuju zjistit.selecteditems, tak to taky nejde z jinýho vlákna jak mam zadat parametr ted nevim jak se nazívá část kódu "public sub....end sub"

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

Nebo se zkuste podívat na komponentu BackgroundWorker

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

Přikládám odkaz na článek o BW (česky) :-)

http://programujte.com/clanek/2008091400...

R.

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