Witam
Mam problem z pętlą w C#
Nie potrafię odznaczyć checkBoxa, przy każdej próbie program się zawiesza.
if (this.checkbox.Checked)
{
for(; ;) lub while(true)
{
...
}
}
Co jest nie tak?
Wątek przeniesiony 2015-06-11 18:05 z C# i .NET przez somekind.
Witam
Mam problem z pętlą w C#
Nie potrafię odznaczyć checkBoxa, przy każdej próbie program się zawiesza.
if (this.checkbox.Checked)
{
for(; ;) lub while(true)
{
...
}
}
Co jest nie tak?
Kod uruchamiasz w tym samym wątku, w którym jest uruchomiony interfejs, dlatego uruchomienie pętli blokuje interfejs.
Aby uzyskać zamierzony efekt, uruchom pętlę w osobnym wątku.
Nieskończona pętla jest nie tak?
To znaczy w jaki sposób mam ja zapisać?
Zależy co chcesz osiągnąć.
To oczywiste, że nieskończona pętla zawiesza program.
if(checkbox...)
{
Thread t = new Thread(JakasMetoda);
t.Start();
}
void JakasMetoda()
{
while(true){}
}
Jeżeli on chce modyfikować GUI w innym wątku niż wątek główny to program mu na to nie pozwoli i wywali wyjątek. W takim wypadku należy użyć dispatchera. Poza tym lepiej wykorzystać już utworzone przez system wątki z puli wątków niż tworzyć samemu nowe:
ThreadPool.QueueUserWorkItem(delegate {
// Tutaj kod, który nie wymaga działań na GUI.
App.Current.Dispatcher.BeginInvoke(new Action(() => {
// Tutaj kod, który robi różne operacje na GUI.
}));
});