Cladude code 更改
This commit is contained in:
@@ -210,31 +210,56 @@ namespace CapMachine.Wpf.Services
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 循环发送数据到CAN
|
||||
/// 循环发送数据到CAN
|
||||
/// </summary>
|
||||
public void CycleSendMsg()
|
||||
{
|
||||
if (ToomossCanDrive.OpenState)
|
||||
if (!ToomossCanDrive.OpenState)
|
||||
{
|
||||
if (ToomossCanDrive.IsCycleSend == false)
|
||||
{
|
||||
if (CmdData.Count > 0)
|
||||
{
|
||||
ToomossCanDrive.IsCycleSend = true;
|
||||
ToomossCanDrive.CmdData = CmdData;
|
||||
ToomossCanDrive.StartPrecisionCycleSendMsg();
|
||||
}
|
||||
else
|
||||
{
|
||||
System.Windows.MessageBox.Show("未发现配置的数据内容", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ToomossCanDrive.StopCycleSendMsg();
|
||||
}
|
||||
|
||||
System.Windows.MessageBox.Show("CAN未打开,请先连接CAN", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand);
|
||||
return;
|
||||
}
|
||||
|
||||
//停止已在运行的循环
|
||||
if (ToomossCanDrive.IsCycleSend == true)
|
||||
{
|
||||
ToomossCanDrive.StopCycleSendMsg();
|
||||
return;
|
||||
}
|
||||
|
||||
//必要的前置校验:DBC 必须已解析成功,否则原生互操作直接 AccessViolation 闪退
|
||||
if (!ToomossCanDrive.DbcParserState || ToomossCanDrive.DBCHandle == 0)
|
||||
{
|
||||
System.Windows.MessageBox.Show("DBC尚未解析成功,无法循环发送", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand);
|
||||
return;
|
||||
}
|
||||
|
||||
//过滤掉 MsgName / SignalName 为空的行(空名传给原生 DBC 解析器是 AV 常见诱因)
|
||||
List<CanCmdData> cmdDataSnapshot;
|
||||
lock (_cmdDataLock)
|
||||
{
|
||||
cmdDataSnapshot = CmdData
|
||||
.Where(x => !string.IsNullOrWhiteSpace(x.MsgName) && !string.IsNullOrWhiteSpace(x.SignalName))
|
||||
.Select(x => new CanCmdData
|
||||
{
|
||||
ConfigName = x.ConfigName,
|
||||
MsgName = x.MsgName,
|
||||
SignalName = x.SignalName,
|
||||
SignalCmdValue = x.SignalCmdValue
|
||||
})
|
||||
.ToList();
|
||||
}
|
||||
|
||||
if (cmdDataSnapshot.Count == 0)
|
||||
{
|
||||
System.Windows.MessageBox.Show("未发现可发送的数据(请检查写入配置的【消息名称】/【信号名称】是否为空)", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand);
|
||||
return;
|
||||
}
|
||||
|
||||
ToomossCanDrive.IsCycleSend = true;
|
||||
//传入的是已经过滤的快照副本,避免与 UI 线程共享同一引用
|
||||
ToomossCanDrive.CmdData = cmdDataSnapshot;
|
||||
ToomossCanDrive.StartPrecisionCycleSendMsg();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user