Diskuze: Debug vs krokování

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

Avatar
vodslon
Člen
Avatar
vodslon:

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):

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ý:

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:

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):

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:

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):

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.