Skip to content

Commit 3336c46

Browse files
2.2.0.2 - Reintroduced the thread for saving screenshots and the lock on xDoc
1 parent 461fa7d commit 3336c46

File tree

2 files changed

+76
-46
lines changed

2 files changed

+76
-46
lines changed

FormMain.cs

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ public partial class FormMain : Form
4646

4747
private BackgroundWorker runFilterSearchThread = null;
4848

49+
private BackgroundWorker runSaveScreenshotsThread = null;
50+
4951
/// <summary>
5052
/// Delegates for the threads.
5153
/// </summary>
@@ -172,6 +174,13 @@ private void InitializeThreads()
172174
WorkerSupportsCancellation = true
173175
};
174176
runFilterSearchThread.DoWork += new DoWorkEventHandler(DoWork_runFilterSearchThread);
177+
178+
runSaveScreenshotsThread = new BackgroundWorker
179+
{
180+
WorkerReportsProgress = false,
181+
WorkerSupportsCancellation = true
182+
};
183+
runSaveScreenshotsThread.DoWork += new DoWorkEventHandler(DoWork_runSaveScreenshotsThread);
175184
}
176185

177186
/// <summary>
@@ -425,6 +434,14 @@ private void DeleteSlides()
425434
}
426435
}
427436

437+
private void SaveScreenshots()
438+
{
439+
if (runSaveScreenshotsThread != null && !runSaveScreenshotsThread.IsBusy)
440+
{
441+
runSaveScreenshotsThread.RunWorkerAsync();
442+
}
443+
}
444+
428445
/// <summary>
429446
/// Searches for screenshots.
430447
/// </summary>
@@ -528,6 +545,11 @@ private void RunDeleteSlides(DoWorkEventArgs e)
528545
FileSystem.DeleteFilesInDirectory(FileSystem.SlidesFolder);
529546
}
530547

548+
private void RunSaveScreenshots(DoWorkEventArgs e)
549+
{
550+
_screenshotCollection.Save();
551+
}
552+
531553
private void RunFilterSearch(DoWorkEventArgs e)
532554
{
533555
if (comboBoxFilterValue.InvokeRequired)
@@ -715,7 +737,7 @@ private void StopScreenCapture()
715737
SearchFilterValues();
716738
SearchDates();
717739

718-
_screenshotCollection.Save();
740+
SaveScreenshots();
719741

720742
Log.Write("Running triggers of condition type ScreenCaptureStopped");
721743
RunTriggersOfConditionType(TriggerConditionType.ScreenCaptureStopped);
@@ -1063,6 +1085,11 @@ private void DoWork_runDeleteSlidesThread(object sender, DoWorkEventArgs e)
10631085
RunDeleteSlides(e);
10641086
}
10651087

1088+
private void DoWork_runSaveScreenshotsThread(object sender, DoWorkEventArgs e)
1089+
{
1090+
RunSaveScreenshots(e);
1091+
}
1092+
10661093
/// <summary>
10671094
/// Runs the "delete old screenshots" thread.
10681095
/// </summary>
@@ -2927,7 +2954,7 @@ private void comboBoxFilterType_SelectedIndexChanged(object sender, EventArgs e)
29272954
/// <param name="e"></param>
29282955
private void timerSaveScreenshots_Tick(object sender, EventArgs e)
29292956
{
2930-
_screenshotCollection.Save();
2957+
SaveScreenshots();
29312958
}
29322959
}
29332960
}

screenshots/ScreenshotCollection.cs

Lines changed: 47 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -561,67 +561,70 @@ public void Save()
561561

562562
if (!screenshot.Saved && xDoc != null && screenshot?.Format != null && !string.IsNullOrEmpty(screenshot.Format.Name))
563563
{
564-
XmlElement xScreenshot = xDoc.CreateElement(XML_FILE_SCREENSHOT_NODE);
564+
lock (xDoc)
565+
{
566+
XmlElement xScreenshot = xDoc.CreateElement(XML_FILE_SCREENSHOT_NODE);
565567

566-
XmlElement xViedId = xDoc.CreateElement(SCREENSHOT_VIEWID);
567-
xViedId.InnerText = screenshot.ViewId.ToString();
568+
XmlElement xViedId = xDoc.CreateElement(SCREENSHOT_VIEWID);
569+
xViedId.InnerText = screenshot.ViewId.ToString();
568570

569-
XmlElement xDate = xDoc.CreateElement(SCREENSHOT_DATE);
570-
xDate.InnerText = screenshot.Date;
571+
XmlElement xDate = xDoc.CreateElement(SCREENSHOT_DATE);
572+
xDate.InnerText = screenshot.Date;
571573

572-
XmlElement xTime = xDoc.CreateElement(SCREENSHOT_TIME);
573-
xTime.InnerText = screenshot.Time;
574+
XmlElement xTime = xDoc.CreateElement(SCREENSHOT_TIME);
575+
xTime.InnerText = screenshot.Time;
574576

575-
XmlElement xPath = xDoc.CreateElement(SCREENSHOT_PATH);
576-
xPath.InnerText = screenshot.Path;
577+
XmlElement xPath = xDoc.CreateElement(SCREENSHOT_PATH);
578+
xPath.InnerText = screenshot.Path;
577579

578-
XmlElement xFormat = xDoc.CreateElement(SCREENSHOT_FORMAT);
579-
xFormat.InnerText = screenshot.Format.Name;
580+
XmlElement xFormat = xDoc.CreateElement(SCREENSHOT_FORMAT);
581+
xFormat.InnerText = screenshot.Format.Name;
580582

581-
XmlElement xComponent = xDoc.CreateElement(SCREENSHOT_COMPONENT);
582-
xComponent.InnerText = screenshot.Component.ToString();
583+
XmlElement xComponent = xDoc.CreateElement(SCREENSHOT_COMPONENT);
584+
xComponent.InnerText = screenshot.Component.ToString();
583585

584-
XmlElement xSlidename = xDoc.CreateElement(SCREENSHOT_SLIDENAME);
585-
xSlidename.InnerText = screenshot.Slide.Name;
586+
XmlElement xSlidename = xDoc.CreateElement(SCREENSHOT_SLIDENAME);
587+
xSlidename.InnerText = screenshot.Slide.Name;
586588

587-
XmlElement xSlidevalue = xDoc.CreateElement(SCREENSHOT_SLIDEVALUE);
588-
xSlidevalue.InnerText = screenshot.Slide.Value;
589+
XmlElement xSlidevalue = xDoc.CreateElement(SCREENSHOT_SLIDEVALUE);
590+
xSlidevalue.InnerText = screenshot.Slide.Value;
589591

590-
XmlElement xWindowTitle = xDoc.CreateElement(SCREENSHOT_WINDOW_TITLE);
591-
xWindowTitle.InnerText = screenshot.WindowTitle;
592+
XmlElement xWindowTitle = xDoc.CreateElement(SCREENSHOT_WINDOW_TITLE);
593+
xWindowTitle.InnerText = screenshot.WindowTitle;
592594

593-
XmlElement xLabel = xDoc.CreateElement(SCREENSHOT_LABEL);
594-
xLabel.InnerText = screenshot.Label;
595+
XmlElement xLabel = xDoc.CreateElement(SCREENSHOT_LABEL);
596+
xLabel.InnerText = screenshot.Label;
595597

596-
xScreenshot.AppendChild(xViedId);
597-
xScreenshot.AppendChild(xDate);
598-
xScreenshot.AppendChild(xTime);
599-
xScreenshot.AppendChild(xPath);
600-
xScreenshot.AppendChild(xFormat);
601-
xScreenshot.AppendChild(xComponent);
602-
xScreenshot.AppendChild(xSlidename);
603-
xScreenshot.AppendChild(xSlidevalue);
604-
xScreenshot.AppendChild(xWindowTitle);
605-
xScreenshot.AppendChild(xLabel);
598+
xScreenshot.AppendChild(xViedId);
599+
xScreenshot.AppendChild(xDate);
600+
xScreenshot.AppendChild(xTime);
601+
xScreenshot.AppendChild(xPath);
602+
xScreenshot.AppendChild(xFormat);
603+
xScreenshot.AppendChild(xComponent);
604+
xScreenshot.AppendChild(xSlidename);
605+
xScreenshot.AppendChild(xSlidevalue);
606+
xScreenshot.AppendChild(xWindowTitle);
607+
xScreenshot.AppendChild(xLabel);
606608

607-
XmlNode xScreenshots = xDoc.SelectSingleNode(SCREENSHOTS_XPATH);
609+
XmlNode xScreenshots = xDoc.SelectSingleNode(SCREENSHOTS_XPATH);
608610

609-
if (xScreenshots != null)
610-
{
611-
if (xScreenshots.HasChildNodes)
612-
{
613-
xScreenshots.InsertAfter(xScreenshot, xScreenshots.LastChild);
614-
}
615-
else
611+
if (xScreenshots != null)
616612
{
617-
xScreenshots.AppendChild(xScreenshot);
618-
}
613+
if (xScreenshots.HasChildNodes)
614+
{
615+
xScreenshots.InsertAfter(xScreenshot, xScreenshots.LastChild);
616+
}
617+
else
618+
{
619+
xScreenshots.AppendChild(xScreenshot);
620+
}
619621

620-
xDoc.Save(FileSystem.ApplicationFolder + FileSystem.ScreenshotsFile);
622+
xDoc.Save(FileSystem.ApplicationFolder + FileSystem.ScreenshotsFile);
621623

622-
screenshot.Saved = true;
624+
screenshot.Saved = true;
623625

624-
_screenshotList[i] = screenshot;
626+
_screenshotList[i] = screenshot;
627+
}
625628
}
626629
}
627630
}

0 commit comments

Comments
 (0)