W funkcji Main jest uruchomiony BackgroundWorker w którego DoWork
wykonywane jest
pokazanie formatki oraz wykonanie jakiejś długiej operacji na bazie
danych.
Na formatce jest też timer na którego cyknięcie jest ustawiona zmiana
tekstu labela
zeby zrobic jakby animacje obracajacej sie kreski czyli | / - \ | / -
\
niestety taki kod:
private delegate void SetTextDelegate(string Text);
private void SetText(string Text)
{
if (Napis.InvokeRequired)
Napis.BeginInvoke(new SetTextDelegate(SetText), Text);
else
Napis.Text = Text;
}
obsługujący wykonanie zmiany tekstu labela powoduje czasami wyrzucenie
wyjątku Cross-thread operation
wyjatek ten wyrzucany jest losowo czyli czasami sie pojawia a czasami
nie
tzn wg mnie losowo bo tak naprawde pewnie jest to od czegos zalezne
tylko kurde nie mam pojecia od czego
wyglada tak jakby wchodził w else mimo że Napis jest InvokeRequired
Proszę o pomoc co może być przyczyną takiego zachowania
> <snip>
> niestety taki kod:
>
> private delegate void SetTextDelegate(string Text);
> private void SetText(string Text)
> {
> if (Napis.InvokeRequired)
> Napis.BeginInvoke(new SetTextDelegate(SetText), Text);
> else
> Napis.Text = Text;
> }
>
> obs�uguj�cy wykonanie zmiany tekstu labela powoduje czasami wyrzucenie
> wyj�tku Cross-thread operation
Gdzie jest pasuj�cy EndInvoke? Nie powinno by� tam przypadkiem Invoke ;-)?
--
Pozdrawiam,
�ukasz 'Maly' Ostrowski. http://l3v.pl/
procedura wykonywana na wyst�pienie zdarzenia OnInfoFromWorker b�dzie
wygl�da�a z grubsza tak:
//----------------------------------------------------------------------------------
void SetText(string Text)
//----------------------------------------------------------------------------------
{
if (this.InvokeRequired)
{
this.Invoke(new InfoFromThreadEventHandler(SetText), new
object[] { Text });
}
else
{
Napis.Text = Text;
}
}
ta procedurk� trzeba doda� do klasy formy zawieraj�cej napis.
--
Pozdro,
Ma�ko
U�ytkownik "bodziec" <bod...@gmail.com> napisa� w wiadomo�ci
news:3b5948ec-6c42-4c09...@k17g2000yqh.googlegroups.com...
Witam,
Mam nast�puj�cy problem:
W funkcji Main jest uruchomiony BackgroundWorker w kt�rego DoWork
wykonywane jest
pokazanie formatki oraz wykonanie jakiej� d�ugiej operacji na bazie
danych.
Na formatce jest te� timer na kt�rego cykni�cie jest ustawiona zmiana
tekstu labela
zeby zrobic jakby animacje obracajacej sie kreski czyli | / - \ | / -
\
niestety taki kod:
private delegate void SetTextDelegate(string Text);
private void SetText(string Text)
{
if (Napis.InvokeRequired)
Napis.BeginInvoke(new SetTextDelegate(SetText), Text);
else
Napis.Text = Text;
}
obs�uguj�cy wykonanie zmiany tekstu labela powoduje czasami wyrzucenie
wyj�tku Cross-thread operation
wyjatek ten wyrzucany jest losowo czyli czasami sie pojawia a czasami
nie
tzn wg mnie losowo bo tak naprawde pewnie jest to od czegos zalezne
tylko kurde nie mam pojecia od czego
wyglada tak jakby wchodzi� w else mimo �e Napis jest InvokeRequired
Prosz� o pomoc co mo�e by� przyczyn� takiego zachowania