Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
hypnozc
Člen
Avatar
hypnozc:7.11.2013 17:48

Zdravím. Mám cyklus while, ve kterém probíhají výpočty a tyto data potřebuji sázet do textBlocku. Mě to zatím funguje jen tak, že až skončí tento cyklus(proběhne určitý počet výpočtů {vždy jiný počet!}), tak se čísla vypíší naráz do textBlocku. Ale chtěl bych, aby hned jak program výpočet spočítá, tak aby se toto číslo objevilo v textBlocku. Myslím, že se to dá udělat přes DataBinging, ale vůbec nevím jak na to...

Příklad cyklu:

while (true)
            {
                if (player1.Nazivu() && player2.Nazivu())
                    Attack();
                else
                {
                    Dead();
                    break;
                }
            }

 private void Attack()
        {
                Damage2.Text += new2.uder.ToString() + "\n";
        }

Budu vděčný za každou radu a předem děkuji za odpovědi.
P.S.: Na Googlu jsem již hledal, ale z těch tutoriálů jsem to nepochopil. a Damage2 je ten textBlock.

Editováno 7.11.2013 17:49
Odpovědět
7.11.2013 17:48
Schopný programátor si štěrbinu vždy najde...
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na hypnozc
Theodor Johnson:7.11.2013 18:01

Mě vždycky fungovalo zavolat tuhle metodu

public static void DoEvents()
{
    Application.Current.Dispatcher.Invoke(DispatcherPriority.Background,
                                          new Action(delegate { }));
}

po přidání textu
(Je to ekvivalent k Application.Do­Events() ve WF)

Nahoru Odpovědět
7.11.2013 18:01
Mo8ilε 15 Ѐλđ
Avatar
Odpovídá na hypnozc
Jakub Lásko[Saarix]:7.11.2013 18:33

Snad to nebude vypadat jako blbý dotaz, ale přece když použiješ

tbxText.Text += text;

Tak se ti ten text v komponentě objeví hned... nebo se pletu?

Nahoru Odpovědět
7.11.2013 18:33
Časem je vše možné.
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na Jakub Lásko[Saarix]
Theodor Johnson:7.11.2013 18:48

Pleteš, pokud jedeš v cyklu, tak to čeká do projetí eventu aplikace a updatu elementů. To že se ti to objeví hned je tím že to vlákno nemáš vytížený a tudíž nemusí čekat na update.

Nahoru Odpovědět
7.11.2013 18:48
Mo8ilε 15 Ѐλđ
Avatar
hypnozc
Člen
Avatar
Odpovídá na Theodor Johnson
hypnozc:7.11.2013 20:45

Díky. Máš naprostou pravdu. Mohl by jsi mi ještě vysvětlit, jak to celé funguje? Chtěl jsem ti dát i++, ale zatím nemohu...

Nahoru Odpovědět
7.11.2013 20:45
Schopný programátor si štěrbinu vždy najde...
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na hypnozc
Theodor Johnson:7.11.2013 20:58

Tím že vlastně použiješ cyklus tak celé hlavní vlákno provádí tu operaci co je v cyklu a nemůže se dostat k tomu aby přidalo ten text to TextBlocku. Dá se to ošetřit třeba využitím vláken, nebo BackgroundWorker. Ta metoda co jsem ti napsal funguje tak že ve vlákně v pozadí provede prázdný příkaz a aplikace se obnoví (updatuje). Tudíž neblokuje hlavní vlákno. Ale i přesto to moc nedopoporučuju, jsou tu i některé elementy které nemají schopnost se takto obnovit na příkaz, ale postačí ti než se naučíš pracovat s vlákny.

Nahoru Odpovědět
7.11.2013 20:58
Mo8ilε 15 Ѐλđ
Avatar
hypnozc
Člen
Avatar
Odpovídá na Theodor Johnson
hypnozc:7.11.2013 21:03

Děkuji. Teď už to chápu.

Nahoru Odpovědět
7.11.2013 21:03
Schopný programátor si štěrbinu vždy najde...
Avatar
Odpovídá na Theodor Johnson
Jakub Lásko[Saarix]:8.11.2013 9:11

Aha :-) eště jsem na toto nenarazil, tak díky moc za osvětlení.

Nahoru Odpovědět
8.11.2013 9:11
Časem je vše možné.
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 8 zpráv z 8.