优化了SereinEnv.WriteLine(Exception, InfoClass)输出,可以通过更改InfoClass控制是否输出异常堆栈信息。

优化了批量加载节点时,脚本节点类型分析异常的问题。
This commit is contained in:
fengjiayi
2025-07-17 22:46:40 +08:00
parent 550122208d
commit 88de5a21f5
13 changed files with 113 additions and 36 deletions

View File

@@ -393,8 +393,8 @@ namespace Serein.NodeFlow.Env
public async Task LoadNodeInfosAsync(List<NodeInfo> nodeInfos)
{
#region NodeInfo创建NodeModel
// 流程接口节点最后才创建
// 加载节点与画布Model进行绑定
async Task AddNodeAsync(NodeInfo nodeInfo, IFlowNode nodeModel)
{
if (!TryGetCanvasModel(nodeInfo.CanvasGuid, out var canvasModel))
@@ -403,6 +403,8 @@ namespace Serein.NodeFlow.Env
}
else
{
// 节点与画布互相绑定
// 需要在UI线程上进行添加否则会报 “不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改”异常
nodeModel.CanvasDetails = canvasModel;
@@ -431,7 +433,6 @@ namespace Serein.NodeFlow.Env
}
}
@@ -469,6 +470,53 @@ namespace Serein.NodeFlow.Env
}
#endregion
#region
HashSet<string> nodeIds = new HashSet<string>();
void ReloadScript(SingleScriptNode scriptNode)
{
if (nodeIds.Contains(scriptNode.Guid))
{
nodeIds.Add(scriptNode.Guid);
return;
}
var pds = scriptNode.MethodDetails?.ParameterDetailss;
if (pds is null || pds.Length == 0)
{
nodeIds.Add(scriptNode.Guid);
return;
}
foreach (var pd in pds)
{
//if (pd.ArgDataSourceType == ConnectionArgSourceType.GetPreviousNodeData) continue;
var argSourceNodeGuid = pd.ArgDataSourceNodeGuid;
if (!string.IsNullOrWhiteSpace(argSourceNodeGuid)
&& flowModelService.TryGetNodeModel(argSourceNodeGuid, out var flowNode) && flowNode is SingleScriptNode argSourceNode)
{
ReloadScript(argSourceNode);
}
}
scriptNode.ReloadScript(); // 如果是流程接口节点,则需要重新加载脚本
nodeIds.Add(scriptNode.Guid);
}
var scriptNodes = nodeInfos.Where(info => info.Type == nameof(NodeControlType.Script))
.Select(info => flowModelService.TryGetNodeModel(info.Guid, out var node) ? node : null)
.OfType<SingleScriptNode>()
.ToList();
foreach (SingleScriptNode scriptNode in scriptNodes)
{
ReloadScript(scriptNode);
}
#endregion
#region
List<NodeInfo> needPlaceNodeInfos = [];

View File

@@ -481,7 +481,7 @@ namespace Serein.NodeFlow.Env
}
catch (Exception ex)
{
SereinEnv.WriteLine(InfoType.ERROR, $"无法加载DLL文件{ex}");
SereinEnv.WriteLine(InfoType.ERROR, $"无法加载DLL文件{ex.Message}");
}
}
@@ -501,7 +501,7 @@ namespace Serein.NodeFlow.Env
}
catch (Exception ex)
{
SereinEnv.WriteLine(InfoType.ERROR, $"无法加载DLL文件{ex}");
SereinEnv.WriteLine(InfoType.ERROR, $"无法加载DLL文件{ex.Message}");
}
}