调试周立功USBCAN提示“尝试读取或写入受保护的内存”错误 调试界面CAN 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是我的接受处理线程uint clear_buf = 0; string timeStamp = string.Empty; string frameFormat = string.Empty; string frameType = string.Empty; string data = string.Empty; #region 接收缓冲初始化 uint len = 0; long index = 0; CANApi.VCI_ERR_INFO errInfo = new CANApi.VCI_ERR_INFO(); errInfo.Passive_ErrData = new byte[10]; //CANApi.VCI_CAN_OBJ[] frameInfos = new CANApi.VCI_CAN_OBJ[20]; #endregion try { for (index = 0; index < 251; index++) //if (true)//while (true) { if (!(My_Can_Parameter.Is_Connect())) break; if (index % 50 == 0) { clear_buf = CANApi.VCI_ClearBuffer(My_Can_Parameter.Get_DeviceType(), My_Can_Parameter.Get_DeviceIndex(), My_Can_Parameter.Get_CanIndex()); if (250 == index) index = 0; } len = 0; len = CANApi.VCI_Receive(My_Can_Parameter.Get_DeviceType(), My_Can_Parameter.Get_DeviceIndex(), My_Can_Parameter.Get_CanIndex(), ref frameInfos[0], 30, 10); if (len <= 0) { CANApi.VCI_ReadErrInfo(My_Can_Parameter.Get_DeviceType(), My_Can_Parameter.Get_DeviceIndex(), My_Can_Parameter.Get_CanIndex(), ref errInfo); } else { for (int i = 0; i < len; i++) { if (i >= frameInfos.Length) break; CANApi.VCI_CAN_OBJ frame = frameInfos[i]; Battery_Display(frame); #region 接收帧显示 string frameID = string.Format("{0:X8}", frame.ID); if (frame.TimeFlag == 0) { timeStamp = "无"; } else { timeStamp = string.Format("{0:X8}", frame.TimeStamp); } if (frame.RemoteFlag == 0) { frameFormat = "数据帧"; } else { frameFormat = "远程帧"; } if (frame.ExternFlag == 0) { frameType = "标准帧"; } else { frameType = "扩展帧"; } if (frame.RemoteFlag == 0) { StringBuilder sbData = new StringBuilder(); for (int j = 0; j < frame.DataLen; j++) { if (frame.Data.Length <= j) break; sbData.AppendFormat("{0:X2} ", frame.Data[j]); } data = sbData.ToString(); } if (frameID != "00000000") { if (!My_Can_Parameter.Halt_Dis) { string frameCount = string.Empty; frame_count++; frameCount = string.Format("{0:X6}", frame_count); this.NotifyReceiveFrame(new FrameInfo(frameCount, frameID, timeStamp, frameFormat, frameType, data)); } } #endregion } } Thread.Sleep(5); } } catch (Exception ee) { } } 要看手册,ControlCAN.dll的函数接收的缓冲区最大多少?是否允许函数重入/多线程执行。 跟拒我的经验是CANApi里空指针或瞎指针导致的,查查CANApi的代码吧。 是这样的,我曾经在vb上面调通过周立功usbcan,并且很稳定,所以不太可能是api的问题,现在的操作方式也一样,想请教下你,C#线程操作,你看下我的线程处理是不是有不恰当的地方 是这样的,我曾经在vb上面调通过周立功usbcan,并且很稳定,所以不太可能是api的问题,现在的操作方式也一样,想请教下你,C#线程操作,你看下我的线程处理是不是有不恰当的地方 以前在VB上面操作过这个api,数据量很大也很稳定啊,您看看我的线程处理是否有不妥的地方 vs2008如何设置字体的单位呢? C#项目的疑问 使用IComparer<T>自定义Sort排序的问题 大家都用什么做报表?? 有没有高手能解释一下这段代码为何会导致DEP?(C#, .net 2.0) 一个SQL查询小问题,很快的 有偿求反编译C#写的DLL文件 在c#中调用dos应用程序 水晶报表如何对打印数据精确定位? .Net FrameWork SDK Beta 2 和.Net FrameWork SDK 正式版 求教 C#串口接收数据问题 请问 C# 要用哪个函数把 文本 123456789 转成 虚拟键码?
uint clear_buf = 0;
string timeStamp = string.Empty;
string frameFormat = string.Empty;
string frameType = string.Empty;
string data = string.Empty;
#region 接收缓冲初始化
uint len = 0;
long index = 0;
CANApi.VCI_ERR_INFO errInfo = new CANApi.VCI_ERR_INFO();
errInfo.Passive_ErrData = new byte[10];
//CANApi.VCI_CAN_OBJ[] frameInfos = new CANApi.VCI_CAN_OBJ[20];
#endregion
try
{
for (index = 0; index < 251; index++) //if (true)//while (true)
{
if (!(My_Can_Parameter.Is_Connect()))
break; if (index % 50 == 0)
{
clear_buf = CANApi.VCI_ClearBuffer(My_Can_Parameter.Get_DeviceType(), My_Can_Parameter.Get_DeviceIndex(), My_Can_Parameter.Get_CanIndex());
if (250 == index)
index = 0;
}
len = 0;
len = CANApi.VCI_Receive(My_Can_Parameter.Get_DeviceType(), My_Can_Parameter.Get_DeviceIndex(), My_Can_Parameter.Get_CanIndex(), ref frameInfos[0], 30, 10);
if (len <= 0)
{
CANApi.VCI_ReadErrInfo(My_Can_Parameter.Get_DeviceType(), My_Can_Parameter.Get_DeviceIndex(), My_Can_Parameter.Get_CanIndex(), ref errInfo);
}
else
{
for (int i = 0; i < len; i++)
{
if (i >= frameInfos.Length) break;
CANApi.VCI_CAN_OBJ frame = frameInfos[i];
Battery_Display(frame);
#region 接收帧显示
string frameID = string.Format("{0:X8}", frame.ID);
if (frame.TimeFlag == 0)
{
timeStamp = "无";
}
else
{
timeStamp = string.Format("{0:X8}", frame.TimeStamp);
}
if (frame.RemoteFlag == 0)
{
frameFormat = "数据帧";
}
else
{
frameFormat = "远程帧";
} if (frame.ExternFlag == 0)
{
frameType = "标准帧";
}
else
{
frameType = "扩展帧";
}
if (frame.RemoteFlag == 0)
{
StringBuilder sbData = new StringBuilder();
for (int j = 0; j < frame.DataLen; j++)
{
if (frame.Data.Length <= j) break;
sbData.AppendFormat("{0:X2} ", frame.Data[j]);
}
data = sbData.ToString();
} if (frameID != "00000000")
{
if (!My_Can_Parameter.Halt_Dis)
{
string frameCount = string.Empty;
frame_count++;
frameCount = string.Format("{0:X6}", frame_count);
this.NotifyReceiveFrame(new FrameInfo(frameCount, frameID, timeStamp, frameFormat, frameType, data));
}
}
#endregion
}
}
Thread.Sleep(5);
}
}
catch (Exception ee)
{ }
}
想请教下你,C#线程操作,你看下我的线程处理是不是有不恰当的地方
想请教下你,C#线程操作,你看下我的线程处理是不是有不恰当的地方