Diskuze: Okno se mi pozdě objevuje
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Tohle je současná metoda waitTenSeconds()
public void waitTenSeconds()
{
DateTime time = DateTime.Now.AddSeconds(10);
bool timeOver = false;
DateTime actualTime;
while (timeOver == false)
{
actualTime = DateTime.Now;
if (actualTime >= time)
{
timeOver = true;
MessageBox.Show("Cas vyprsel");
}
}
}
Nedá se tam nějak připsat třeba this.Show(); nebo něco podobného ? S timerem jsem ještě nikdy nepracoval.
Sice Timer lze použít, ale mnohem lepší a jednodušší -> Timer.Sleep()
To jsem používal předtím. Ono to udělá to samé co tohle.
Však to udělej v jiném vlákně přes backgroundworker.
Do čekací smyčky přidej
Application.ProcessMessages();
Jinak nejsem si teď jistej, kdy přesně se Load volá, jestli to ještě nebudeš muset z load přesunout třeba to Show nebo do timeru.
Případně to úplně vyřeší druhé vlákno
Nebude ti stačit tohle:
private void game_Load(object sender, EventArgs e)
{
//Zobrazíš formulář
this.Show();
//Počkáš 10 vteřin
core.waitTenSeconds();
MessageBox.Show("Tohle se objeví až po 10s. Bohužel zároveň s oknem game");
}
Udělal bych to v jiném vlákně, časově náročnější operace by neměly být v hlavním vlákně, protože to slouží pro vykreslování a zachytávání eventů UI.
Vlákna si můžeš buď vytvářet ručně a nebo to jde pohodlnějí přes background worker, který umožňuje v události "Report progress" přistupovat i k UI (což standardně z jiného vlákna nejde).
Zobrazeno 12 zpráv z 12.