Spustenie vlakna – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Spustenie vlakna – .NET – Fórum – Programujte.comSpustenie vlakna – .NET – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Tayson0
Stálý člen
9. 7. 2013   #1
-
0
-

Mam takyto kod

class A

{

public string listen()
        {

            client = new UdpClient(LocalPort);
            IPEndPoint host = new IPEndPoint(IPAddress.Any, 0);

            while (true)
            {
                if ((client.Available > 0))
                {
                    byte[] received = client.Receive(ref host);   
                    string receivedString = Encoding.ASCII.GetString(received);   
                    return receivedString;
                }
            }
        }

}

Tato metoda hore nerobi nic ine v triede iba pocuva na porte a vracia string.

Potrebujem aby tato metoda bezala vo vlakne a aby sa hodnota stale zapisovala do textboxu vo forme1 z triedy A.

Nahlásit jako SPAM
IP: 85.237.239.–
Reklama
Reklama
JardaJirava0
Stálý člen
9. 7. 2013   #2
-
0
-

Ahoj,

nejspíše řešíš stále stejný problém, který je zde ve vláknu předávání hodnot mezi dvěma formy. Rozvedu tedy své navržené řešení.

Předpokládám, že spustit kus kódu v jiném vláknu dokážeš. Pak tedy budeš z tebou zde uvedené třídy publikovat event, ke kterému se můžeš připojit.

class A

{
public event EventHandler<string> DataReceived;

public string listen()
        {

            client = new UdpClient(LocalPort);
            IPEndPoint host = new IPEndPoint(IPAddress.Any, 0);

            while (true)
            {
                if ((client.Available > 0))
                {
                    byte[] received = client.Receive(ref host);   
                    string receivedString = Encoding.ASCII.GetString(received);   
                    OnDataReceived(receivedString);
                }
            }
        }
	protected virtual void OnDataReceived(string data) {
		var handler = DataReceived;
		if (handler != null)
			handler(data);
	}
}

Samozřejmě, na formuláři si pak budeš muset přes SynchronizationContext (případně InvokeRequired atd.) ošetřit, že nebudeš aktualizovat UI prvky z jiného vlákna (odpovědi jak hledej níže v otázkách).

Pěkný den,

Nahlásit jako SPAM
IP: 78.3.73.–
MCAD, MCPD
http://jirava.net/blog
http://xaml.cz - Magazín moderních technologií založených na XAML
Tayson
~ Anonymní uživatel
177 příspěvků
10. 7. 2013   #3
-
0
-

#2 JardaJirava
No spravil som to nejako podobne ale ako to spustam vo vlakne tak mam problem a to taky ze mi vypise chybu "cross thread operation no valid"..... takze ja vlastne v triede A ukladam retaze receivedString do vytvoreneho textboxu a spustam vo vlakne..... skusal som funkciu lock aby mi uzamkla textbox kym ho pouzivam v metode ale nefunguje to a neviem ako to spravit .... este som to skusal cez metodu invoke ale ani to mi nefunguje a neviem ako to mam spravit aby mi to slo spustit.Samozrejme potom potom tu metodu celu volam vo Form1 kde to ma bezat na pozadi.

Nahlásit jako SPAM
IP: 85.237.239.–
Tayson0
Stálý člen
10. 7. 2013   #4
-
0
-

#3 Tayson
if (button == true)
            {

               com.t.Abort();     //!!!!!!!!!!!!!!!!!!!!!!!! tuto ak je tlacidlo rovne true tak mi nezastavi vlakno

                button = false;
                listen.Text = "Listen";
                listen.BackColor = Color.Lime;
                textLp.Enabled = true;
                textRp.Enabled = true;
                textIp.Enabled = true;
                textSend.Enabled = false;
            }
            else
            {


                com.tb = textOut; //priradenie z formu do triedy
                com.t.Start();     //spustenie vlakna
                button = true;
                listen.Text = "Close";
                listen.BackColor=Color.Red;
                textLp.Enabled = false;
                textRp.Enabled = false;
                textIp.Enabled = false;
                textSend.Enabled = true;
            }

Mam este hore jeden problem kde ak tlacidlo je true tak sa nezastavi vlakno ktore bolo spustene ak bolo tlacidlo false

Nahlásit jako SPAM
IP: 87.197.98.–
JardaJirava0
Stálý člen
10. 7. 2013   #5
-
0
-

Ahoj,

zastavit běh vlákna pomocí Abort je "nebezpečné" neboť následuje výjimka ThreadAbortException. Tu nejspise nemas ani osetrenu.

A jak jsem psal v prispevku, je treba osetrit pristup k UI prvkum (viz ona cross thread exception) a to pomoci nejake synchronizacni techniky. Samotný lock nepomůže.

Zaroven si nejsem jist tvojí definicí, že to voláš z Form1, kde to má běžet na pozadí, UI je určeno pro prezentaci dat, ne pro zpracování dat. Rozběhni si naslouchání, přiřaď obsluhu pro eventy a zobraz Form.

Pěkný den,

Nahlásit jako SPAM
IP: 78.1.114.–
MCAD, MCPD
http://jirava.net/blog
http://xaml.cz - Magazín moderních technologií založených na XAML
Tayson0
Stálý člen
10. 7. 2013   #6
-
0
-

#5 JardaJirava
No ja si tie data zobrazujem v textboxe vo forme takze chcem aby to stale bezalo vo vlakne 

Nahlásit jako SPAM
IP: 158.193.105.–
Tayson0
Stálý člen
11. 7. 2013   #7
-
0
-

#5 JardaJirava
A co mam rozpisane to tlacidlo ..... tak jednym tlacidlo aj spustam aj zastavujem a potom si to kontrolujem v podmienke if ci je true alebo false a podla toho potom spustam vlakno alebo zastavujem.... nevies mi poradit preco vlakno nezastavi a akym sposobom h zastavit ..... zdrojak je vyssie

Nahlásit jako SPAM
IP: 85.237.239.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 48 hostů

Podobná vlákna

Spustenie — založil dedo

Spustenie programu — založil Mrkvicka

Spustenie notepadu — založil qwerty

Spustenie programu v c++ — založil tomas krajco

Spustenie programu v C# — založil anonym

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý