Forum » Programiranje » [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.
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.
// ... 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.
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.
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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [ASP.NET] Prenos podatkov iz ene spletne strani v drugoOddelek: Programiranje | 914 (773) | Cvenemir |
» | Koda kalkulatorja v MS visual C# 2008?Oddelek: Programiranje | 2938 (2275) | smukC |
» | c# ... kako je to mozno da Windows.Forms.Timer na istem threadu vec msg boxov pozeneOddelek: Programiranje | 1300 (1259) | Vapo1 |
» | razložitev nekaterij elementov v visual studio 05Oddelek: Programiranje | 2081 (1886) | darkolord |
» | [php] Kako odstraniti dolocen textOddelek: Izdelava spletišč | 1053 (994) | rokpok |