add lock for independent task

This commit is contained in:
辉鸭蛋
2024-03-16 15:20:01 +08:00
parent 62492b3f95
commit 037d4dadff
7 changed files with 146 additions and 94 deletions

View File

@@ -42,8 +42,6 @@ public class AutoDomainTask
private readonly AutoDomainConfig _config;
private bool IsRunning { get; set; }
public AutoDomainTask(AutoDomainParam taskParam)
{
_taskParam = taskParam;
@@ -54,13 +52,20 @@ public class AutoDomainTask
_clickOffset = new ClickOffset(captureArea.X, captureArea.Y, assetScale);
_combatCommands = CombatScriptParser.Parse(_taskParam.CombatStrategyContent);
_config = TaskContext.Instance().Config.AutoDomainConfig;
IsRunning = false;
}
public async void Start()
{
var hasLock = false;
try
{
Monitor.TryEnter(TaskContext.TaskLocker, ref hasLock);
if (!hasLock)
{
Logger.LogError("启动自动秘境功能失败:当前存在正在运行中的独立任务,请不要重复执行任务!");
return;
}
Init();
var combatScenes = new CombatScenes().InitializeTeam(GetContentFromDispatcher());
@@ -125,13 +130,16 @@ public class AutoDomainTask
TaskTriggerDispatcher.Instance().SetCacheCaptureMode(DispatcherCaptureModeEnum.OnlyTrigger);
TaskSettingsPageViewModel.SetSwitchAutoDomainButtonText(false);
Logger.LogInformation("→ {Text}", "自动秘境结束");
IsRunning = false;
if (hasLock)
{
Monitor.Exit(TaskContext.TaskLocker);
}
}
}
private void Init()
{
IsRunning = true;
LogScreenResolution();
if (_taskParam.DomainRoundNum == 9999)
{
@@ -374,7 +382,6 @@ public class AutoDomainTask
return false;
}
/// <summary>
/// 旋转视角后寻找石化古树
/// </summary>
@@ -665,10 +672,8 @@ public class AutoDomainTask
Sleep(800, _taskParam.Cts);
}
Sleep(1000, _taskParam.Cts);
var captureArea = TaskContext.Instance().SystemInfo.CaptureAreaRect;
for (var i = 0; i < 30; i++)
{
@@ -757,4 +762,4 @@ public class AutoDomainTask
Logger.LogInformation("剩余:浓缩树脂 {CondensedResinCount} 脆弱树脂 {FragileResinCount}", condensedResinCount, fragileResinCount);
return (condensedResinCount, fragileResinCount);
}
}
}