Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: C# WF - přístup k prvkům na formuláři z jiného vlákna

C# .NET .NET (C# a Visual Basic) C# WF - přístup k prvkům na formuláři z jiného vlákna American English version English version

Aktivity (1)
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Adam Ježek:12.4.2015 20:43

Ahoj,
mám WF aplikaci a v ni vytvořené vlákno

Thread vlakno = new Thread(odpalTo);

ale když se z něj pokusim upravit něco na formuláři, tak to skončí s chybou. Ve WPF to stačilo zabalit do Dispatcher,Invoke, ale ten ve WF očividně neni.
Jak to udělat ve WF? A nejlépe do toho zabalit celé vlákno, abych nemusel každé label1.Text = "asdgfgh"; zabalovat do nějakého bloku.
Díky

Odpovědět 12.4.2015 20:43
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Adam Ježek
Jan Vargovský:12.4.2015 21:06

jen zavoláš Invoke na tom labelu. Btw, když bys měl předat celou práci na to vlákno, tak to už nemusíš zakládat nové :D

Editováno 12.4.2015 21:08
 
Nahoru Odpovědět 12.4.2015 21:06
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Jan Vargovský
Adam Ježek:12.4.2015 21:09

TO vlákno bude běžet asi hodinu, a já bych mezitim rád měl funkční zbytek :D btw, ten invoke na to zavolam jak?

Nahoru Odpovědět 12.4.2015 21:09
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Adam Ježek
Jan Vargovský:12.4.2015 21:21

Úplně stejně jako s tím dispatcherem.

Thread t = new Thread(Metoda);
t.Start();

private void Metoda()
{
    for (int i = 0; i < 10; i++)
    {
        label1.Invoke(new Action(() => label1.Text = i.ToString()));
        Thread.Sleep(500);
    }
}
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 12.4.2015 21:21
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Nahoru Odpovědět 12.4.2015 21:22
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Adam Ježek
Jan Vargovský:12.4.2015 21:31
Thread t = new Thread(Metoda);
t.Start();

private void Metoda()
{
    for (int i = 0; i < 10; i++)
    {
        label1.Invoke(new Action<int>(Change), i);
        Thread.Sleep(500);
    }
}

private void Change(int obj)
{
    label1.Text = obj.ToString();
}

Správně by to mělo být asi takto, aby ses zbytečně neodkazoval na jiný kontext.

 
Nahoru Odpovědět 12.4.2015 21:31
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.