Fix a bug that will cause stop task crash.

This commit is contained in:
parallelbgls
2018-03-15 21:54:26 +08:00
parent b721ff2797
commit 69a818ca22

View File

@@ -245,9 +245,13 @@ namespace Modbus.Net
task.GetMachine = () => Machine; task.GetMachine = () => Machine;
task.GetTaskFactory = () => _tasks; task.GetTaskFactory = () => _tasks;
if (!TasksWithTimer.Exists(taskCon => taskCon.Name == task.Name)) if (!TasksWithTimer.Exists(taskCon => taskCon.Name == task.Name))
{ {
TasksWithTimer.Add(task); lock (TasksWithTimer)
{
TasksWithTimer.Add(task);
}
task.StartTimer(); task.StartTimer();
return true; return true;
} }
@@ -265,7 +269,10 @@ namespace Modbus.Net
{ {
var task = TasksWithTimer.FirstOrDefault(taskCon => taskCon.Name == taskItemName); var task = TasksWithTimer.FirstOrDefault(taskCon => taskCon.Name == taskItemName);
task?.StopTimer(); task?.StopTimer();
TasksWithTimer.Remove(task); lock (TasksWithTimer)
{
TasksWithTimer.Remove(task);
}
return true; return true;
} }
return false; return false;
@@ -278,8 +285,13 @@ namespace Modbus.Net
public bool StopAllTimers() public bool StopAllTimers()
{ {
var ans = true; var ans = true;
foreach (var task in TasksWithTimer) lock (TasksWithTimer)
ans = ans && StopTimer(task.Name); {
for (int i = 0; i < TasksWithTimer.Count; i++)
{
ans = ans && StopTimer(TasksWithTimer[0].Name);
}
}
return ans; return ans;
} }
@@ -306,8 +318,13 @@ namespace Modbus.Net
public bool PauseAllTimers() public bool PauseAllTimers()
{ {
var ans = true; var ans = true;
foreach (var task in TasksWithTimer) lock (TasksWithTimer)
ans = ans && PauseTimer(task.Name); {
for (int i = 0; i < TasksWithTimer.Count; i++)
{
ans = ans && PauseTimer(TasksWithTimer[i].Name);
}
}
return ans; return ans;
} }
@@ -334,8 +351,11 @@ namespace Modbus.Net
public bool ContinueAllTimers() public bool ContinueAllTimers()
{ {
var ans = true; var ans = true;
foreach (var task in TasksWithTimer) lock (TasksWithTimer)
ans = ans && ContinueTimer(task.Name); {
foreach (var task in TasksWithTimer)
ans = ans && ContinueTimer(task.Name);
}
return ans; return ans;
} }