public StatusBlinker() { Task.Factory.StartNew(() => { while (true) { Task.Delay(1000).Wait(); var activeFlags = new NetworkStatusEnum[0]; lock (lockFlags) { activeFlags = Enum.GetValues(typeof(NetworkStatusEnum)).Cast <NetworkStatusEnum>() .Where(i => flagsStatus.HasFlag(i)) .ToArray(); } int idx = 0; foreach (var f in activeFlags) { idx++; EmitStatus?.Invoke(this, f); if (idx < activeFlags.Length) { Task.Delay(1000).Wait(); } } } }); }
internal void WrapNetworkStatusInNewTask(NetworkStatusEnum status, Action workToDo) { Task.Factory.StartNew(() => { WrapNetworkStatus(status, workToDo); }); }
public void SetNetworkStatus(NetworkStatusEnum flag, bool isActive) { lock (lockFlags) { if (isActive) { flagsStatus |= flag; // Set flag } else { flagsStatus &= ~flag; // Remove flag } } }
internal void WrapNetworkStatus(NetworkStatusEnum status, Action workToDo) { statusBlinker.SetNetworkStatus(status, true); RaisePropertyChangedEvent(nameof(IsWorking)); try { workToDo(); } catch (Exception ex) { Log.Error(ex, "Managed error in WrapNetworkStatus:"); } finally { statusBlinker.SetNetworkStatus(status, false); RaisePropertyChangedEvent(nameof(IsWorking)); } }
private void UploadLogFragment(Action callbackOnError = null) { var logToSend = FileMonitor.LogContentToSend.ToString(); UploadInfoToServer(true, logToSend, () => { NetworkStatusEnum flags = MainWindowVM.GetFlagsNetworkStatus(); var activeStatus = Enum.GetValues(typeof(NetworkStatusEnum)).Cast <NetworkStatusEnum>() .Where(i => i != NetworkStatusEnum.Ready) .Where(i => flags.HasFlag(i)) .ToArray(); // Only log when the problem is not that it just is already uploading if (activeStatus.Length != 1 || activeStatus[0] != NetworkStatusEnum.Uploading) { Log.Warning("FileSizeChangedNewText() Could not upload data. Status:{status} - Problems:{problems}", string.Join(",", activeStatus), MainWindowVM.ProblemsList); } }); }
public bool HasFlag(NetworkStatusEnum flag) { lock (lockFlags) return(flagsStatus.HasFlag(flag)); }
void StatusBlinkerEmitStatus(object sender, NetworkStatusEnum status) { networkStatusDisplayed = status; RaisePropertyChangedEvent(nameof(NetworkStatusDisplayed)); RaisePropertyChangedEvent(nameof(IsWorking)); }