Zdravim
Mam takyto problem. Mam premennu s nazvom receivedString ktora je definovana lokalne v triede. Tato premenna je spustena vo vlakne kde vycitava stale dookola data cez UDP protkol.
Vyzera to nasledovne:
public static string receivedString=""; //lokalne zadefinovanie premennej
public Thread t;
public communication() //konstruktor
{
t = new Thread(new ThreadStart(listen)); //spustenie funkcie vo vlakne
}
public void listen()
{
...vycitavanie dat cez UDP
receivedString = Encoding.ASCII.GetString(received); //stale uklada data do premennej vo vlakne
}
Dalej v druhej triede porovnavam tuto premennu s nejakym textom cize hladam nejaky textovy retazec preto ju mam aj staticku. To hladanie mam taktiez spustene vo vlakne a stale dookola porovnava retazec ktory chcem s datami ktore prichadzaju.
Vyzera to nasledovne:
while (true)
{
if (communication.receivedString.Contains("blabla"))
{Set();
...
}
}
Samozrejme si to vypisujem do textboxu tie data ktore dookola prichadzaju cez UDP. Vypisovanie do textboxu prebieha este v predchadzajucej triede vo funkcii listen.
Samotny problem je v tom ze ja ak pouzijem EventWaitHandle a pride program na miesto kde je napisane WaitOne(); tak cakam kym sa nesplni podmienka ze sa retazec v premennej bude rovnat mojmu retazcu ktory hladam a potom sa vykona Set(); a program bezi dalej od miesta kde bolo WaitOne(); Mam teraz na mysli tu druhu funkciu ktora bezi vo vlakne a stale dookola porovnava. Ale mne pokial nenastavi to Set(); tak hlada vo vlakne stale dookola retazec ale ta premenna receivedString zamrzne aj ked je spustena vo vlakne. Preco je to tak ked ja tym EventWaitHandle zastavim len vykonavanie hlavneho vlakna kde mi nebude nic vypisovat do textboxu ale ta premenna vo vlakne by sa mala stale menit.