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: Debug vs krokování

C# .NET .NET (C# a Visual Basic) Debug vs krokování American English version English version

Aktivity (1)
Avatar
vodslon
Člen
Avatar
vodslon:18.11.2014 17:03

Ahoj jeden začátečnickej dotaz, chtěl jsem poradit kolegovi v jiném vlákně a narazil jsem na problém, procházím všechny labely v gridu a náhodně jim přiřadí jméno. Zkoušel jsem to dělat více způsoby, ale pořád to samé. Když projet pustím přes F5 hodí to všem labelům stejné jméno, ale když si někam dám breakpoint a odkrokuji to celé, tak to labelům přiřadí náhodné jméno , což je správně? Jak je to možný ? :)

private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            foreach (Label l in Grid1.Children.OfType<Label>())
            {
                l.Content = JmenoZaka();
            }

        }

        private string JmenoZaka()
        {
            List<string> ListZaku = new List<string>();
            ListZaku.Add("Honza");
            ListZaku.Add("Karel");
            ListZaku.Add("Vašek");
            ListZaku.Add("Petr");
            ListZaku.Add("Lukáš");
            ListZaku.Add("Robert");

            Random r = new Random();
            int i = r.Next(ListZaku.Count);
            string a = ListZaku[i];

            return a;
        }
 
Odpovědět 18.11.2014 17:03
Avatar
Odpovídá na vodslon
Michal Žůrek (misaz):18.11.2014 17:09

protože když to provádíš rychle za sebou (bez krokování), tak to vždycky vygeneruje stejné číslo. Dej si tam mezi generaci čísla kód, který uspí vlákno na nějakou dobu
hodnota v parametru):

System.Threading.Thread.Sleep(10);

pokud to i přesto nebude fungovat zvyšuj to číslo v parametru.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 18.11.2014 17:09
Nesnáším {}, proto se jim vyhýbám.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na vodslon
Jan Vargovský:18.11.2014 17:10

Vyhoď si ten random do třídy z té do metody. Generuje se to ze seedu a ten se bere ze systémového času.

 
Nahoru Odpovědět  +2 18.11.2014 17:10
Avatar
vodslon
Člen
Avatar
Odpovídá na Michal Žůrek (misaz)
vodslon:18.11.2014 17:23

Obou moc děkuji za odpověď tušil jsem, že to bude tím, že to krokování mu veme více času. Uspávání vlákna funguje. Druhá rada mi ale příjde lepší v tom, že to nebudu muset hlídat, tam tedy jde o to aby se inicializace toho Randomu udělala dřív a v jiném čase?

 
Nahoru Odpovědět 18.11.2014 17:23
Avatar
Odpovídá na vodslon
Michal Žůrek (misaz):18.11.2014 17:33

to je jedno kdy se udělá. Důležité je kolikrát se udělá a jaký je mezitím časový rozdíl.

V tom tvém případě jsi to vytvářel milionkrát v stejném čase, takže on pokaždé vytvořil generátor se stejný základem a proto vždy vyplivl stejné číslo. Tím že to vytvoříš jednou nebo mezi vytvořením necháš posun času (= vytvoříš ho s jiným základem) ti vždy vygeneruje jiné číslo.

Nahoru Odpovědět  +2 18.11.2014 17:33
Nesnáším {}, proto se jim vyhýbám.
Avatar
vodslon
Člen
Avatar
Odpovídá na Michal Žůrek (misaz)
vodslon:18.11.2014 17:35

rozumím, děkuji todle je dobrý vědět.

 
Nahoru Odpovědět 18.11.2014 17:35
Avatar
Odpovídá na vodslon
Luboš Běhounek (Satik):18.11.2014 18:53

Proto je nejlepší si ten generátor iniciovat jednou na začátku.

Nahoru Odpovědět 18.11.2014 18:53
:)
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 7 zpráv z 7.