COM端口不响应的C#程序
我有一个C#/.NET程序,它使用COM端口和带有WCF服务的SQL CE数据库。有时程序变得无响应(窗口冻结),甚至在调试模式下,我也无法解释原因 我可以在重新启动电脑或COM端口后重新启动程序。问题不在于我的COM端口问题,因为我在许多PC上都尝试过,但都有相同的问题 我如何解决这个问题COM端口不响应的C#程序,c#,sql,.net,wcf,serial-port,C#,Sql,.net,Wcf,Serial Port,我有一个C#/.NET程序,它使用COM端口和带有WCF服务的SQL CE数据库。有时程序变得无响应(窗口冻结),甚至在调试模式下,我也无法解释原因 我可以在重新启动电脑或COM端口后重新启动程序。问题不在于我的COM端口问题,因为我在许多PC上都尝试过,但都有相同的问题 我如何解决这个问题 private void timer_Tick(object sender, EventArgs e) { try { labeltimer.Text = DateTime.
private void timer_Tick(object sender, EventArgs e)
{
try
{
labeltimer.Text = DateTime.Now.ToString();
if (timerstarted == true)
{
return;
}
timerstarted = true;
_CARDCODE = 0;
string error = "";
bool hasbassed = false;
if (this._Close == true)
{
this.Close();
}
if (serialPort1.IsOpen)
{
if (i < 8)
{
i++;
}
else
{
i = 0;
}
to[0] = (byte)(128 + i);
try
{
serialPort1.Write(to, 0, 1);
}
catch (System.Exception ex)
{
ListViewItem Lvi = new ListViewItem((++rowcount).ToString());
Lvi.SubItems.Add("");
Lvi.SubItems.Add("");
Lvi.SubItems.Add("Disconnected");
Lvi.SubItems.Add("");
listView.Items.Add(Lvi);
StartPort();
}
if (progressBar.Value >= 1500)
progressBar.Value = 0;
else
progressBar.Value += 10;
if (serialPort1.BytesToRead != 0)
{
byte[] data = new byte[serialPort1.BytesToRead];
from = new byte[3];
try
{
serialPort1.Read(data, 0, data.Length);
}
catch (System.Exception ex)
{
ListViewItem LVi = new ListViewItem((++rowcount).ToString());
LVi.SubItems.Add("");
LVi.SubItems.Add("");
LVi.SubItems.Add("Disconnected");
LVi.SubItems.Add("");
listView.Items.Add(LVi);
StartPort();
}
// data.Length == 4 by Button or HassPassed
if (data.Length == 4)
{
if (data[1] > 2)
DBS.AddButtonPass(data[0], data[1] / 4);
else
{
DBS.EditPass((int)data[0]);
timerstarted = false;
return;
}
}
else if ((data[data.Length - 1] != 255) || (data.Length < 4))
{
from[0] = data[0];
from[1] = 0;
from[2] = 0;
serialPort1.Write(from, 0, 3);
timerstarted = false;
return;
}
//RegistoringSubscriber_ID Add Subscriber Card
else if ((RegistoringSubscriber_ID > 0) && (RegisterCheckpoint != 0) && (data[0] == RegisterCheckpoint))
{
Registoring = false;
if (RegistorNewCard(Convert.ToInt32(data[2].ToString() + data[3].ToString() + data[4].ToString())) > 0)
FormBringPC.AnswerType = 1;
else
FormBringPC.AnswerType = 2;
RegistoringSubscriber_ID = 0;
error = "register card";
}
// RegistoringSubscriber_ID < 0 Add Bonus Card
else if ((RegistoringSubscriber_ID < 0) && (RegisterCheckpoint != 0) && (data[0] == RegisterCheckpoint))
{
Registoring = false;
if (RegistorBonusCard(Convert.ToInt32(data[2].ToString() + data[3].ToString() + data[4].ToString())) > 0)
FormBringPC.AnswerType = 1;
else
FormBringPC.AnswerType = 2;
RegistoringSubscriber_ID = 0;
error = "register Bonus card";
}
else if ((List_Checkpoint_ID.Contains(data[0]) && ((data[1] == 130) || (data[1] == 129))))
{
// DBS.EditPass((int)data[0]);
}
else if ((List_Checkpoint_ID.Contains(data[0]) && (data.Length == 7)))
{
_CARDCODE = Convert.ToInt32(data[2].ToString() + data[3].ToString() + data[4].ToString());
GlobalTypes.InvalidPass pass = DBS.CheckPassStatus(_CARDCODE, (int)data[0], (int)data[1]);
if (pass == GlobalTypes.InvalidPass.Valid)
{
from[0] = data[0];
from[1] = 1;
from[2] = 1;
serialPort1.Write(from, 0, 3);
LBTitle.Text = DateTime.Now.ToLongTimeString();
hasbassed = true;
}
else
{
from[0] = data[0];
from[1] = 0;
from[2] = 0;
serialPort1.Write(from, 0, 3);
switch (pass)
{
case GlobalTypes.InvalidPass.InvalidCard:
{
error = "Չգրանցված քարտ";
break;
}
case GlobalTypes.InvalidPass.InvalidCount:
{
error = "Այց. քանակ";
break;
}
case GlobalTypes.InvalidPass.InvalidGraphic:
{
error = "Ժամանակ hh:mm:ss";
break;
}
case GlobalTypes.InvalidPass.InvalidPeriod:
{
error = "Ժամանակահատված xxxx.dd.yyy";
break;
}
case GlobalTypes.InvalidPass.InvalidStatus:
{
error = "Հառացված աբոնենտ";
break;
}
case GlobalTypes.InvalidPass.InvalidSuscribe:
{
error = "Անհայտ բաժանորդ";
break;
}
default:
{
error = "esim inch";
break;
}
}
}
}
else if ((List_Checkpoint_ID.Contains(data[0]) && (data.Length > 0)))
{
try
{
byte[] ticket = new byte[data.Length - 6];
for (int ii = 0; ii < data.Length - 6; ii++)
{
ticket[ii] = data[ii + 2];
}
_CARDCODE = Convert.ToInt32(Encoding.ASCII.GetString(ticket.ToArray()));
GlobalTypes.HasPass pass = DBS.CheckTicketPassStatus(_CARDCODE, (int)data[0], (int)data[1]);
if (pass == GlobalTypes.HasPass.TruePass)
{
from[0] = data[0];
from[1] = 1;
from[2] = 1;
serialPort1.Write(from, 0, 3);
LBTitle.Text = DateTime.Now.ToLongTimeString();
hasbassed = true;
}
else
{
from[0] = data[0];
from[1] = 0;
from[2] = 0;
serialPort1.Write(from, 0, 3);
switch (pass)
{
case GlobalTypes.HasPass.CardNotFound:
{
error = "Not registored ticket";
break;
}
case GlobalTypes.HasPass.CardRepeat:
{
error = "ReEntring";
break;
}
case GlobalTypes.HasPass.ValidationPeriodError:
{
error = "Ժամանակ hh:mm:ss";
break;
}
case GlobalTypes.HasPass.SeasonError:
{
error = "Ժամանակահատված xxxx.dd.yyy";
break;
}
case GlobalTypes.HasPass.WeekOfDayError:
{
error = "Day of Weak";
break;
}
default:
{
error = "esim inch";
break;
}
}
}
}
catch { timerstarted = false; return; }
}
if (rowcount >= 10)
{
rowcount = 0;
listView.Items.Clear();
}
ListViewItem lvi = new ListViewItem((++rowcount).ToString());
lvi.SubItems.Add(data[0].ToString());
if (data.Length == 4)
hasbassed = true;
if (((data[1] == 2) || (data[1] == 8)) && ((data.Length == 4) || (Dictionary_Chekpoint[data[0]].CheckPointType == 2)))
{
lvi.SubItems.Add("Ելք");
}
else
{
lvi.SubItems.Add("Մուտք");
}
if (data.Length != 4)
lvi.SubItems.Add(_CARDCODE.ToString());
else
lvi.SubItems.Add("Հերթապահ");
lvi.SubItems.Add(error);
if (hasbassed == true)
{
lvi.BackColor = Color.LightGreen;
}
else
{
lvi.BackColor = Color.LightPink;
}
listView.Items.Add(lvi);
}
}
else MessageBox.Show("Serial port is closed!", "RS232 tester", MessageBoxButtons.OK, MessageBoxIcon.Error);
timerstarted = false;
}
catch
{
timerstarted = false;
return;
}
private void timer_Tick(对象发送方,事件参数e)
{
尝试
{
labeltimer.Text=DateTime.Now.ToString();
if(timerstarted==true)
{
返回;
}
timerstarted=true;
_CARDCODE=0;
字符串错误=”;
bool hasbassed=false;
if(this.\u Close==true)
{
这个。关闭();
}
if(serialPort1.IsOpen)
{
如果(i<8)
{
i++;
}
其他的
{
i=0;
}
至[0]=(字节)(128+i);
尝试
{
serialPort1.Write(to,0,1);
}
catch(System.Exception-ex)
{
ListViewItem Lvi=新的ListViewItem(++rowcount.ToString());
Lvi.子项。添加(“”);
Lvi.子项。添加(“”);
Lvi.子项。添加(“断开”);
Lvi.子项。添加(“”);
listView.Items.Add(Lvi);
StartPort();
}
如果(progressBar.Value>=1500)
progressBar.Value=0;
其他的
progressBar.值+=10;
if(serialPort1.BytesToRead!=0)
{
字节[]数据=新字节[serialPort1.BytesToRead];
from=新字节[3];
尝试
{
serialPort1.Read(data,0,data.Length);
}
catch(System.Exception-ex)
{
ListViewItem LVi=新的ListViewItem(++rowcount.ToString());
LVi.子项。添加(“”);
LVi.子项。添加(“”);
LVi.子项。添加(“断开”);
LVi.子项。添加(“”);
listView.Items.Add(LVi);
StartPort();
}
//data.Length==4(按按钮或已传递)
如果(data.Length==4)
{
如果(数据[1]>2)
DBS.AddButtonPass(数据[0],数据[1]/4);
其他的
{
DBS.EditPass((int)数据[0]);
timerstarted=false;
返回;
}
}
else如果((data[data.Length-1]!=255)| |(data.Length<4))
{
from[0]=数据[0];
从[1]=0;
从[2]=0;
serialPort1.Write(from,0,3);
timerstarted=false;
返回;
}
//注册用户\u ID添加用户卡
else if((RegistoringSubscriber_ID>0)&&(RegisterCheckpoint!=0)&(data[0]==RegisterCheckpoint))
{
注册=假;
if(RegistorNewCard(Convert.ToInt32(数据[2].ToString()+数据[3].ToString()+数据[4].ToString())>0)
FormBringPC.AnswerType=1;
其他的
FormBringPC.AnswerType=2;
RegisteringSubscriber_ID=0;
error=“登记卡”;
}
//注册用户\u ID<0添加奖金卡
else if((RegistoringSubscriber_ID<0)&&(RegisterCheckpoint!=0)&(data[0]==RegisterCheckpoint))
{
注册=假;
if(RegistorBonusCard(Convert.ToInt32(数据[2].ToString()+数据[3].ToString()+数据[4].ToString())>0)
FormBringPC.AnswerType=1;
其他的
FormBringPC.AnswerType=2;
RegisteringSubscriber_ID=0;
error=“注册奖金卡”;
}
如果((列表检查点ID包含(数据[0])&((数据[1]=130)| |(数据[1]=129)))
{
//DBS.EditPass((int)数据[0]);
}
else if((List_Checkpoint_ID.包含(data[0])&&(data.Length==7)))
{
_CARDCODE=Convert.ToInt32(数据[2].ToString()+数据[3].ToString()+数据[4].ToString());
GlobalTypes.InvalidPass pass=DBS.CheckPassStatus(_CARDCODE,(int)数据[0],(int)数据[1]);
if(pass==GlobalTypes.InvalidPass.Valid)
{
from[0]=数据[0];
从[1]=1;
从[2]=1;
serialPort1.Write(from,0,3);
LBTitle.Text=DateTime.Now.ToLongTimeString();
hasbassed=true;
}
其他的
{
from[0]=数据[0];
从[1]=0;
从[2]=0;
serialPort1.Write(from,0,3);
开关(通过)
{
案例GlobalTypes.InvalidPass.InvalidCard:
{
错误=“Չգ㗒նվ㗊ք㗊տ”;
打破
}
案例GlobalTypes.InvalidPass.InvalidCount:
{
error=“Այց。քանա”