/// <summary> /// Сигнализирует потоку, что пора заканчивать /// </summary> public void terminate() { lock (_storeThreadStateLock) { _storeThreadState = StoreThreadStates.Terminating; } }
/// <summary> /// Конструктор /// </summary> /// <param name="storeLogic">Объект, содержащий логику рабочего потока</param> public StoreThread(ThreadStart storeLogic) { _storeLogic = storeLogic; // Создаём рабочий поток _storeThreadState = StoreThreadStates.Working; _storeThread = new Thread(threadMethod); // Приоритет назначаем ниже обычного _storeThread.Priority = ThreadPriority.BelowNormal; }
/// <summary> /// Тело рабочего потока /// </summary> void threadMethod() { StoreThreadStates threadState; do { // Выполняем логику итерации потока _storeLogic.Invoke(); // И проверяем, не пора ли завершаться lock (_storeThreadStateLock) { threadState = _storeThreadState; } }while (threadState == StoreThreadStates.Working); // После завершения устанавливаем признак, что работа закончена lock (_storeThreadStateLock) { _storeThreadState = StoreThreadStates.Terminated; } }