using System;
using System.Windows.Forms;
namespace DSPRE {
public static class ExtensionMethods {
///
/// Increment the progress bar value, without using Windows Aero animation
///
public static void IncrementNoAnimation(this ProgressBar pb, int amount = 1) {
pb.Value += amount;
if (pb.Value != pb.Maximum){ pb.Value++; }
pb.Value--;
}
//https://stackoverflow.com/a/10939890
///
/// Sets the progress bar value, without using Windows Aero animation
///
public static void SetProgressNoAnimation(this ProgressBar pb, int value) {
// Don't redraw if nothing is changing.
if (value == pb.Value)
return;
// To get around this animation, we need to move the progress bar backwards.
if (value == pb.Maximum) {
// Special case (can't set value > Maximum).
pb.Value = value; // Set the value
pb.Value = value - 1; // Move it backwards
}
else {
pb.Value = value + 1; // Move past
}
pb.Value = value; // Move to correct value
}
/*
searchInScriptsButton.BeginInvoke(new Action(() => {
}));
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += (_sender, args) => {
this.UIThread(() => {
});
};
//easier to set up
searchInScriptsButton.BeginInvoke(new Action(() => {
searchProgressBar.Value += 1;
}));
//smoother if you put the control updates in the UIThread
//same as BeginInvoke if you put the entire logic in UIThread
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += (_sender, args) => {
this.UIThread(() => {
searchProgressBar.Value += 1;
});
};
bw.RunWorkerAsync();
*/
public static void UIThread(this Control control, Action code) {
if (control.InvokeRequired) {
control.BeginInvoke(code);
return;
}
code.Invoke();
}
}
}