Thread View: alt.pl.comp.lang.csharp
3 messages
3 total messages
Started by bodziec
Tue, 08 Dec 2009 08:11
Cross-thread exception - pojawia się tylko czasami mimo Invoke
Author: bodziec
Date: Tue, 08 Dec 2009 08:11
Date: Tue, 08 Dec 2009 08:11
34 lines
2245 bytes
2245 bytes
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
Re: Cross-thread exception - pojawia się tylko czasami mimo Invoke
Author: Łukasz 'Maly' Ostrowski
Date: Tue, 08 Dec 2009 08:31
Date: Tue, 08 Dec 2009 08:31
23 lines
1483 bytes
1483 bytes
On Tue, 8 Dec 2009 00:11:29 -0800 (PST), bodziec wrote:
> <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/
Re: Cross-thread exception - pojawia się tylko czasami mimo Invoke
Author: GrzybSon
Date: Sat, 09 Jan 2010 15:05
Date: Sat, 09 Jan 2010 15:05
67 lines
3144 bytes
3144 bytes
Dość często korzystam z wątków w C# i robię to tak:
1. wątek umieszczam w jakiejś zewnętrznej klasie (BackGroundNapisWorker) i
wystawiam publiczne zdarzenie
np. InfoFromThreadEventHandler
2. w formie powołuję instacje tego obiektu, zapisuję się na zdarzenie
wystawione w klasie i staruję wątek.
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" <bodziec@gmail.com> napisał w wiadomości
news:3b5948ec-6c42-4c09-831f-988805402e9c@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
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads