🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#21262
Author: bodziec
Date: Tue, 08 Dec 2009 08:11
34 lines
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
#21263
Author: Łukasz 'Maly' Ostrowski
Date: Tue, 08 Dec 2009 08:31
23 lines
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
#21264
Author: GrzybSon
Date: Sat, 09 Jan 2010 15:05
67 lines
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