Fixing a cleanup / reentrant problem by closing the current CaptureForm if a new is opened and disposing the capture before exiting MakeCapture().

git-svn-id: http://svn.code.sf.net/p/greenshot/code/trunk@1614 7dccd23d-a4a3-4e1f-8c07-b4c1b4018ab4
This commit is contained in:
RKrom 2012-01-31 16:18:44 +00:00
commit d4e9b70161
2 changed files with 20 additions and 0 deletions

View file

@ -47,6 +47,7 @@ namespace Greenshot.Forms {
private static Brush GreenOverlayBrush = new SolidBrush(Color.FromArgb(50, Color.MediumSeaGreen));
private static Brush RedOverlayBrush = new SolidBrush(Color.FromArgb(50, Color.DarkRed));
private static Pen OverlayPen = new Pen(Color.FromArgb(50, Color.Black));
private static CaptureForm currentForm = null;
private int mX;
private int mY;
@ -81,6 +82,20 @@ namespace Greenshot.Forms {
}
public CaptureForm(ICapture capture, List<WindowDetails> windows) {
if (currentForm != null) {
LOG.Debug("Found currentForm, Closing already opened CaptureForm");
currentForm.Close();
currentForm = null;
Application.DoEvents();
}
currentForm = this;
// clean up
this.FormClosed += delegate {
currentForm = null;
LOG.Debug("Remove CaptureForm from currentForm");
};
this.capture = capture;
this.windows = windows;
captureMode = capture.CaptureDetails.CaptureMode;

View file

@ -297,6 +297,11 @@ namespace Greenshot.Helpers {
LOG.Warn("Unknown capture mode: " + captureMode);
break;
}
if (capture != null) {
LOG.Debug("Disposing capture");
capture.Dispose();
}
}
/// <summary>