Witam, spotkałem się z zaskakującą sytuacją, która polega na:
zrobiłem soft, który odbiera dan z rs232 i na ich podstawie coś tam robi.
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string data = "";
while (serialPort1.BytesToRead > 0) {
data += System.Convert.ToString((byte)serialPort1.ReadByte(), 16) + " ";
}
if (data.Length >21)
{
this.BeginInvoke(new SetTextDeleg(ReadCM), new object[] { data.Substring(0, data.Length - 1) });
}
if(monitor == 1) this.BeginInvoke(new SetTextDeleg(si_DataReceived), new object[] { data.Substring(0, data.Length - 1) });
}
program wysyła do ReadCM paczkę danych a ReadCM sprawdza co to i coś tam z tym robi.
private void ReadCM(string sx_all)
{
string[] sx = sx_all.Split(' ');
int[] bajt = new int[sx.Length];
string[] bajts = new string[sx.Length];
try
{
string adres = "", kanal = "";
string info = "", typ = "";
for (int i = 0; i < sx.Length; i++)
{
if (sx[i] != "" && sx[i] != null)
{
bajt[i] = Convert.ToInt32(sx[i], 16); // konwersja z string hex na int dec
bajts[i] = sx[i];
}
}
...
adres = obn + "." + rgn + "." + mdn;
kanal = kan;
int odp = 0;
string pom = "";
string kodkarty = "";
//CM
switch (bajt[6])
{
case 0xBC: //temp odp. manual
typ = "TEMP";
//stanTemp(temp + " " + tempzad + " " + offset + " " + tempDO + " " + tempOD + " " + adres);
string temp = bajt[7].ToString();
if (int.Parse(bajt[8].ToString()) > 0) { temp += ",5"; }
string temp_zadana = bajt[9].ToString();
if (int.Parse(bajt[10].ToString()) > 0) { temp_zadana += ",5"; }
string temp_od = bajt[11].ToString();
if (int.Parse(bajt[12].ToString()) > 0) { temp_od += ",5"; }
string temp_do = bajt[13].ToString();
if (int.Parse(bajt[14].ToString()) > 0) { temp_do += ",5"; }
stanTemp(temp + " " + temp_zadana + " " + temp_do + " " + temp_od + " " + adres);
//Thread t2 = new Thread(() => instrukcjeWarunkowe("Obwód", adres, obwodybin));
//t2.Start();
break;
}
}
catch (IndexOutOfRangeException ex)
{
MessageBox.Show("An index was out of range!" + ex.Message);
}
catch (Exception ex)
{
//MessageBox.Show("Some sort of error occured: " + ex.Message);
}
finally
{
//MessageBox.Show("It's the end of our try block. Time to clean up!");
}
}
Problem polega na tym, że wszystko pięknie działa gdy skompiluję i uruchomię program bezpośrednio w visualstudio (visualstudio przesyła program po USB na urządzenie i na nim go uruchamia), ale gdy przeniosę pliki na urządzenie (Win CE) i odpalę je bezpośrednio na nim to podczas wykonywania ReadCM program "wywala" błąd IndexOutOfRangeException.
Nie wiem co jest grana. Czarna magia? :(
Bardzo proszę o pomoc.