111,092
社区成员




/// <summary>
/// 读取线程
/// </summary>
/// <param name="list"></param>
void reader_TagsReport(List<TagInfo> list)
{
if (list.Count == 0) return;
bool tagNew = false;
DateTime? newReadTime = null;
list.ForEach((x) =>
{
var tag = listTag.Find(c => c.Epc == x.Epc);
if (tag == null)
{
var tagnew = new TagInfo()
{
Epc = x.Epc,
ReadCount = 1,
ReadTime = DateTime.Now,
ReaderId = x.ReaderId,
AntennaId = x.AntennaId
};
lock (listTag)
{
listTag.Add(tagnew);
newReadTime = DateTime.Now;
tagNew = true;
}
}
else
{
lock (listTag)
{
tag.ReadCount++;
tag.ReadTime = DateTime.Now;
tag.ReaderId = x.ReaderId;
tag.AntennaId = x.AntennaId;
}
}
});
//刷新UI
if (tagNew) //读取到新标签
{
this.BeginInvoke(new Action<bool, DateTime?>(BindData), true, newReadTime);
}
else //旧标签的重复读取
{
//进行时间间隔控制:如果刷新频率太高,即使跨线程调用也会把UI线程卡死的
DateTime dtNow = DateTime.Now;
if (lastRead == null || (dtNow - lastRead).TotalMilliseconds > 100)
{
this.BeginInvoke(new Action<bool, DateTime?>(BindData), false, null);
lastRead = dtNow;
}
}
}
/// <summary>
/// UI线程刷新
/// </summary>
/// <param name="readTime"></param>
/// <param name="isNew"></param>
private void BindData(bool isNew, DateTime? readTime)
{
var bindingList = this.gridEpcs.DataSource as BindingList<TagInfo>;
bindingList.ResetBindings();
if (isNew) lbCount.Text = listTag.Count.ToString();
if (readTime.HasValue)
{
TimeSpan ts = readTime.Value - readStart;
lbTimeCount.Text = ts.Seconds.ToString() + "s" + ts.Milliseconds.ToString();
}
}
int received_count;
//接收的buffer
byte[] serial_buf = new byte[10240000];
bool is_rev = false;
FrameParsor parsor;
/// <summary>
/// 传输数据逻辑修改,需要修改的地方为bytes转str的那一步
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void mycom_DataReceived(object sender, EventArgs e) //接收串口数据并分析
{
if (closing)
return;
try
{
is_rev = true;
int n = mycom.BytesToRead;
if (n < 1)
{
//***接收完成状态指示。
is_rev = false;
return;
}
//读数据,
if( n > 10240000)
{
n = 10240000;
}
byte[] data = new byte[n];
mycom.Read(serial_buf, 0, n);
//使用FrameParsor转换数据格式
Array.Copy(serial_buf, 0, data, 0 ,n);
parsor.AddFrame(data);
Thread.Sleep(10);
}
catch (Exception ex)
{
//
Log.WriteLog(ex);
throw ex;
}
finally
{
is_rev = false;
}
}
/// <summary>
/// 定时刷新com_txt组件
/// </summary>
/// <param name="obj"></param>
//
void flushComTxt(object obj)
{
if(com_txt_add.Length() <= 0)
{
return;
}
com_txt.BeginInvoke(new EventHandler(delegate
{
//***正在处理字符串。
DoingStr = true;
if (true == checkBox1.Checked)
{
if (com_txt.Text.Length > 131072)
{
com_txt.Text = string.Empty;
}
com_txt.AppendText(com_txt_add.Empty());
com_txt_add.Empty();
//将控件的内容滚动到当前位置。
com_txt.ScrollToCaret();
}
//***完成处理字符串。
DoingStr = false;
}
));
while (DoingStr)
{
//处理其它系统消息。
Application.DoEvents();
}
}
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);