» »

[C#] Threading - napaka pri spreminjanju textboxa iz threada

[C#] Threading - napaka pri spreminjanju textboxa iz threada

sverde21 ::

Imam en začetniški problem, namreč imam en simpl program, ki bere podatke iz dveh spletnih strani in jih sparsa in prikaže. Vse dela lepo, ampak želim uporabiti threading, da bi program hkrati vlekel podatke iz obeh strani, in ne najprej iz ene in potem iz druge.
// ...
public Test1() // konstruktor
{
	InitializeComponent();
	refreshData();
}

private void refreshData()
{
	Thread thread1 = new Thread(refreshStran1);
	thread1.Start();

	//refreshStran1();
        refreshStran2();
}

private void refreshStran1()
{
	// preberemo vsebino strani v spremenljivko
        string html = getPageHTML("http://www.example.com/");

	if(html != null)
	{
		string patern = "<td class=\"onlineimena\">.*</td><td class=\"onlinedesno\">([\\d]*)</td>";
                // izluščimo zanimivo vsebino v spremenljivko
		string regex_data = doRegEx(html, patern);
		textbox1.Text = regex_data; // <-- tukajle se zatakne...
	}
}
// ...

Program se skompajla lepo, ampak ko pride do izvrševanja vrstice označene zgoraj^^ v kodi mi javi da ne mora spremeniti vrednosti v formi, ki ni bila ustvarjena v tem threadu... Ve kdo rešitev?

BTW sm že googlu in poskušu neke rešitve, objavljene na netu, ampak ni bilo uspeha.
<?php echo `w`; ?>

teac ::

Ne moreš spreminjat vsebine kontrol iz drugega threada kot tistega, v katerem je forma ustvarjena. Klik.

Vesoljc ::

seveda lahko.

v app-u kjer tece forma naredis buffer v katerega padajo zahteve od zunaj, od ostalih threadov. seveda mora bit tale
array primerno zaklenjen (thread safe, mutex, lock, etc...). v main loopu preverjas vsebino bufferja ter ga izvrsujes, medtem ko threadi nabirajo podatke, ki ti jih v rednih intervalih posiljajo.
Abnormal behavior of abnormal brain makes me normal...

BlueRunner ::

Ne kompliciraj si življenja preveč, če to ni res potrebno. Princip bi sicer deloval, vendar pa bi obsegal veliko preveč kode. Rešitev je v metodah Invoke, oziroma BeginInvoke, ki vzameta za parameter delegata, ki ga bo UI nit ob prvi priložnosti izvršila v svojem kontekstu. Primer za uporabo je kar na strani http://www.yoda.arachsys.com/csharp/threads/winforms.shtml, ki je tudi prvi rezultatl, če v Googlu, če napišeš napišeš "windows forms thread".

Google in MSDN sta tvoja prva dva prijatelja.

sverde21 ::

Sm zrihtu zdej s pomočjo onega linka ;) . Program zdej dela velik hitreje :)) . Prej se ene pol sekunde sploh pojavu ni, da je prvič osvežil podatke, zdej se pa takoj pojavi in naknadno osveži.
<?php echo `w`; ?>


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[ASP.NET] Prenos podatkov iz ene spletne strani v drugo

Oddelek: Programiranje
14914 (773) Cvenemir
»

Koda kalkulatorja v MS visual C# 2008?

Oddelek: Programiranje
212938 (2275) smukC
»

c# ... kako je to mozno da Windows.Forms.Timer na istem threadu vec msg boxov pozene

Oddelek: Programiranje
51300 (1259) Vapo1
»

razložitev nekaterij elementov v visual studio 05

Oddelek: Programiranje
72081 (1886) darkolord
»

[php] Kako odstraniti dolocen text

Oddelek: Izdelava spletišč
51053 (994) rokpok

Več podobnih tem