[ wex-alpha @ 28.03.2011. 09:35 ] @
Pozdrav, Imam problem gdje mi se event handler ne poziva tada kada meni treba. Program salje komande u uredjaj. Nakon svake komande sljedi odgovori. Taj odgovor moze biti razlicit i na osnovu tog odgovora moram tako i reagovati (greska? nema struje? blokirao uredja? itd..). Imam sljedecu strukturu: Handleri: Code (csharp): Kao i odgovarajuce metode (navodim samo jednu metodu radi prostora): Code (csharp): void fCom_OnIncomingData(object sender, fCommunicationEventArgs e) { if (checkBox_Batch.Checked == false) { this.textBox_receive.Text = fCom.CommunicationTools.ByteArrayToHexString(e.ReceiveMessageByte); //using the helper class for converting the incoming data to hex string } else { string line = "Receive: " + fCom.CommunicationTools.ByteArrayToHexString(e.ReceiveMessageByte) + "\n"; this.richTextBox_Log.AppendText(line); incomingData.dataString = e.ReceiveMessageString; incomingData.dataByte = e.ReceiveMessageByte; } } I na kraju while koji ceka odgovor. Code (csharp): incomingData.dataString = string.Empty; //isprazni podatke tako da novi stignu ... while (incomingData.dataString == string.Empty) //sve dok nema odgovora cekaj dok ne dodje { // ovo se vrti sve dok ne stigne odgovor iz uredjaja Thread.Sleep(10); //Pricekaj malo dok ne stigne odgovor } // dalje sljedi if-else struktura Ovo savrseno radi, kada je standalone, hocu reci kada je u malom programu koji to testira. Problem nastaje kada ovo implementiram u vec gotovu aplikaciju. Onaj event handler koji puni string, se nikada ne zove i shodno tome while se zauvijek vrti u petlji. Da mijenjam aplikaciju nije opcija, jer je vec ogromna. Nasao sam dirty fix, koji rijesava problem sa event handlerom i nejgovim pozivom, ali onda kopletan sistem je sporiji za cirka 50%. Zato sto se sve uspori zbog pozivanja messagebox-a. Ako recimo u while stavim ovo (oboje radi): MessageBoxEx.Show("JAVI SE", 0) ili MessageBox.Show("JAVI SE") dakle: while (incomingData.dataString == string.Empty) //sve dok nema odgovora cekaj dok ne dodje { // ovo se vrti sve dok ne stigne odgovor iz uredjaja MessageBoxEx.Show("JAVI SE", 0); //Obican message box, koji se automatski gasi. INT odredjue vrijeme gasenja u ms. Thread.Sleep(10); //Pricekaj malo dok ne stigne odgovor [/code] Onda se event handler aktivira i obavi svoj posao. Zbog nekog razloga, jednom kada udje u while loop nikada ne izlazi iz njega, sve dok ne napravim "break" sa messagebox trikom. Kako mogu eksplicitno da zovnem handler u ovom mom slucaju? |