Cladude code 更改

This commit is contained in:
2026-05-14 18:26:22 +08:00
parent 268f4baf99
commit df3da9d9cb
4 changed files with 107 additions and 48 deletions

View File

@@ -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();
}