Avatar
Adam Ježek
Tým ITnetwork
Avatar
Adam Ježek:

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
Programátor dělá co může. Počítač co chce. | Pokud mi dáš mínus, tak prosim, napiš proč!
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Adam Ježek
Jan Vargovský:

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:

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
Programátor dělá co může. Počítač co chce. | Pokud mi dáš mínus, tak prosim, napiš proč!
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Adam Ježek
Jan Vargovský:

Ú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
Programátor dělá co může. Počítač co chce. | Pokud mi dáš mínus, tak prosim, napiš proč!
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Adam Ježek
Jan Vargovský:
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.