From 290971831608fa9e328cb5e5188ce0d1c2046967 Mon Sep 17 00:00:00 2001
From: muellerp <Philipp1.Mueller@Student.Reutlingen-University.de>
Date: Fri, 7 Mar 2025 17:25:26 +0100
Subject: [PATCH] remove debug info and fix some process monitor issues
---
.../Screens/Regulaer/02Session.xaml | 4 +-
.../Screens/Regulaer/02Session.xaml.cs | 12 ++++-
.../Screens/Regulaer/Mascott.xaml | 2 +
.../Screens/Regulaer/Mascott.xaml.cs | 16 +++----
.../Services/ProcessMonitor.cs | 46 +++++++++----------
5 files changed, 45 insertions(+), 35 deletions(-)
diff --git a/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Screens/Regulaer/02Session.xaml b/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Screens/Regulaer/02Session.xaml
index fccccfd..5ae7dcb 100644
--- a/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Screens/Regulaer/02Session.xaml
+++ b/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Screens/Regulaer/02Session.xaml
@@ -53,8 +53,8 @@
</StackPanel>
<Button Content="Pause" Name="PlayPauseButton" Style="{StaticResource PlayPauseButton}" HorizontalAlignment="Center" Margin="0,320,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.5,0.5" Click="PlayPause_Click"></Button>
- <Button Content="Mascott Up" Click="Button_Click_1" HorizontalAlignment="Left" Margin="116,375,0,0" VerticalAlignment="Top"/>
- <Button Content="Mascott Down" Click="Button_Click" HorizontalAlignment="Left" Margin="116,400,0,0" VerticalAlignment="Top"/>
+ <!--<Button Content="Mascott Up" Click="Button_Click_1" HorizontalAlignment="Left" Margin="116,375,0,0" VerticalAlignment="Top"/>
+ <Button Content="Mascott Down" Click="Button_Click" HorizontalAlignment="Left" Margin="116,400,0,0" VerticalAlignment="Top"/>-->
<TextBlock HorizontalAlignment="Left" Margin="116,350,0,0" Text="0" VerticalAlignment="Top" Name="StageText"/>
</Grid>
</Page>
\ No newline at end of file
diff --git a/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Screens/Regulaer/02Session.xaml.cs b/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Screens/Regulaer/02Session.xaml.cs
index c5323c2..7219527 100644
--- a/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Screens/Regulaer/02Session.xaml.cs
+++ b/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Screens/Regulaer/02Session.xaml.cs
@@ -3,6 +3,7 @@ using InnoLabProjektDektopApp.Services;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
+using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
@@ -308,10 +309,17 @@ namespace InnoLabProjektDektopApp
private void Page_Unloaded(object sender, RoutedEventArgs e)
{
+ timer.Stop();
+ timer.Tick -= Timertick;
+ processMonitor.MonitorCycleStarted -= HandleMonitorCycleStarted;
+ processMonitor.MonitorPaused -= HandleMonitorPaused;
+ processMonitor.MonitorResumed -= HandleMonitorResumed;
+ processMonitor.MonitorBreakStarted -= HandleMonitorBreakStarted;
+ processMonitor.MonitorSessionFinished -= HandleMonitorSessionFinished;
mascott.Close();
}
- private void Button_Click_1(object sender, RoutedEventArgs e)
+ /*private void Button_Click_1(object sender, RoutedEventArgs e)
{
mascott.emotionUp_();
ProcessMonitor.tmpStage++;
@@ -323,7 +331,7 @@ namespace InnoLabProjektDektopApp
mascott.emotionDown_();
ProcessMonitor.tmpStage--;
StageText.Text = ProcessMonitor.tmpStage.ToString();
- }
+ }*/
public void NavigateTo(Object page)
{
diff --git a/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Screens/Regulaer/Mascott.xaml b/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Screens/Regulaer/Mascott.xaml
index 34c264f..343a8c8 100644
--- a/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Screens/Regulaer/Mascott.xaml
+++ b/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Screens/Regulaer/Mascott.xaml
@@ -17,7 +17,9 @@
Title="Mascott" Height="250" Width="250">
<Grid>
<Image Name="MascottImage" Source="pack://application:,,,/Assets/MascottAnimation/Up/4/frame0.png" Width="250" Height="250" />
+ <!--
<TextBlock Name="Counterxd" HorizontalAlignment="Left" Height="30" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="55" Foreground="White" FontSize="22" Margin="195,45,0,0"/>
<Ellipse Name="ellipse1" HorizontalAlignment="Left" Fill="Lime" Height="28" Margin="208,0,0,0" Stroke="Black" VerticalAlignment="Center" Width="28" RenderTransformOrigin="-0.946,0.07"/>
+ -->
</Grid>
</Window>
diff --git a/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Screens/Regulaer/Mascott.xaml.cs b/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Screens/Regulaer/Mascott.xaml.cs
index 0b2058e..87b013d 100644
--- a/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Screens/Regulaer/Mascott.xaml.cs
+++ b/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Screens/Regulaer/Mascott.xaml.cs
@@ -59,18 +59,18 @@ namespace InnoLabProjektDektopApp.Screens.Regulaer
if (processMonitorStage == oldDistractionStage)
{
- Counterxd.Text = "x: " + processMonitorStage.ToString();
+ // Counterxd.Text = "x: " + processMonitorStage.ToString();
return;
}
else if (processMonitorStage < oldDistractionStage)
{
emotionUp_();
- Counterxd.Text = "d: " + processMonitorStage.ToString();
+ // Counterxd.Text = "d: " + processMonitorStage.ToString();
}
else if (processMonitorStage > oldDistractionStage)
{
emotionDown_();
- Counterxd.Text = "u: " + processMonitorStage.ToString();
+ // Counterxd.Text = "u: " + processMonitorStage.ToString();
}
oldDistractionStage = processMonitorStage;
}
@@ -86,7 +86,7 @@ namespace InnoLabProjektDektopApp.Screens.Regulaer
animationDirection = "Down";
frameCounter = 1;
- Counterxd.Text = distractionStage.ToString();
+ // Counterxd.Text = distractionStage.ToString();
frameTimer = new DispatcherTimer();
frameTimer.Interval = TimeSpan.FromMilliseconds(42);
frameTimer.Tick += frameTick;
@@ -104,7 +104,7 @@ namespace InnoLabProjektDektopApp.Screens.Regulaer
animationDirection = "Up";
frameCounter = 1;
- Counterxd.Text = distractionStage.ToString();
+ // Counterxd.Text = distractionStage.ToString();
frameTimer = new DispatcherTimer();
frameTimer.Interval = TimeSpan.FromMilliseconds(42);
frameTimer.Tick += frameTick;
@@ -120,12 +120,12 @@ namespace InnoLabProjektDektopApp.Screens.Regulaer
if (!successfullySet)
{
frameTimer.Stop();
- ellipse1.Fill = Brushes.Red;
+ //ellipse1.Fill = Brushes.Red;
}
- else
+ /* else
{
ellipse1.Fill = Brushes.Lime;
- }
+ }*/
frameCounter++;
}
diff --git a/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Services/ProcessMonitor.cs b/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Services/ProcessMonitor.cs
index da09c26..b546777 100644
--- a/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Services/ProcessMonitor.cs
+++ b/InnoLabProjektDektopApp/InnoLabProjektDektopApp/Services/ProcessMonitor.cs
@@ -2,6 +2,7 @@
using System.IO;
using System.Management;
using System.Runtime;
+using System.Threading.Tasks;
using System.Windows;
using System.Windows.Navigation;
using Newtonsoft.Json;
@@ -46,12 +47,17 @@ namespace InnoLabProjektDektopApp.Services
public event EventHandler MonitorResumed;
public event EventHandler MonitorBreakStarted;
public event EventHandler MonitorSessionFinished;
+ private ManagementEventWatcher watcher;
public ProcessMonitor()
{
IsBreak = false;
IsPause = false;
blockedProcesses = LoadBlockedProcesses();
+ var query = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1),
+ "TargetInstance isa \"Win32_Process\"");
+ watcher = new ManagementEventWatcher { Query = query };
+ watcher.EventArrived += (sender, e) => HandleProcessEvent(e.NewEvent);
}
public async void StartMonitoring()
@@ -66,11 +72,9 @@ namespace InnoLabProjektDektopApp.Services
cycleStartTimeList[1] = DateTime.Now;
}
Debug.WriteLine("Started Process Monitoring");
- var query = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1),
- "TargetInstance isa \"Win32_Process\"");
- var watcher = new ManagementEventWatcher { Query = query };
isMonitoring = true;
+ await Task.Run(() => watcher.Start());
// check if any distracting processes are already running
var processes = GetRunningProcessList();
@@ -81,22 +85,16 @@ namespace InnoLabProjektDektopApp.Services
ShowDistractionWarning(process.Key);
}
}
+ }
-
- await Task.Run(() =>
+ private void HandleProcessEvent(ManagementBaseObject e)
+ {
+ if(!isMonitoring)
{
- while (isMonitoring)
- {
- // this wait is here to prevent another event from being triggered before the previous one is handled
-
- var task = Task.Run(() => watcher.WaitForNextEvent());
- if (Task.WaitAny(task, Task.Delay(100)) == 0)
- {
- if (!isMonitoring) break;
- Task.Run(() => HandleNewProcess(task.Result));
- }
- }
- });
+ return;
+ }
+ Task.Run(() => HandleNewProcess(e));
+
}
public void StopMonitoring()
@@ -105,6 +103,7 @@ namespace InnoLabProjektDektopApp.Services
{
return;
}
+ watcher.Stop();
Debug.WriteLine("Stopping Process Monitoring");
foreach(var process in processStartTimes)
{
@@ -135,9 +134,9 @@ namespace InnoLabProjektDektopApp.Services
}
breakInfoList.Add(new BreakInfo(breakStartTime, DateTime.Now, IsBreak, currentCycle));
IsBreak = false;
- StartMonitoring();
currentCycle++;
cycleStartTimeList[currentCycle] = DateTime.Now;
+ StartMonitoring();
MonitorCycleStarted?.Invoke(this, EventArgs.Empty);
}
@@ -209,11 +208,12 @@ namespace InnoLabProjektDektopApp.Services
return sessionInfoFilePath;
}
+ /*
public static int tmpStage = 4;
public static int CalculateCurrentDistractionStageTmp(DateTime endTime) {
return tmpStage;
- }
+ }*/
public int CalculateCurrentDistractionStage(DateTime endTime)
{
@@ -255,11 +255,9 @@ namespace InnoLabProjektDektopApp.Services
{
// Check if the process is already being tracked
if (processStartTimes.TryGetValue(processName, out _)) return;
-
- processStartTimes[processName] = DateTime.Now;
-
if (IsProcessOnBlockedList(processName))
{
+ processStartTimes[processName] = DateTime.Now; // Add the process to the list of tracked to prevent multiple warnings
var result = MessageBox.Show($"Are you sure you want to get distracted by {processName}?", "Distracting Process Detected",
MessageBoxButton.YesNo,
MessageBoxImage.Question,
@@ -274,6 +272,8 @@ namespace InnoLabProjektDektopApp.Services
}
else
{
+ // Save the start time of the process so we can calculate the time it has been running without waiting for the process to end
+ processStartTimes[processName] = DateTime.Now;
TrackProcess(processName, DateTime.Now);
}
}
@@ -340,7 +340,6 @@ namespace InnoLabProjektDektopApp.Services
var waitForExitTask = Task.Run(() =>
{
process.WaitForExit();
- SaveTrackedData(processName, startTime);
}, token);
// Task to monitor the isMonitoring flag
@@ -357,6 +356,7 @@ namespace InnoLabProjektDektopApp.Services
// Await the completion of either the waitForExitTask or the monitorTask
await Task.WhenAny(waitForExitTask, monitorTask);
cts.Cancel();
+ SaveTrackedData(processName, startTime);
}
catch (OperationCanceledException)
{
--
GitLab