Quite commonly, when working with WinForms, we perform time consume processes, for example, search on click, do some business logic, and delete entities from DB on some action.
This is the class you can add into the UI infrastructure for displaying the progress:
public class WaitIndicator : IDisposable
{
ProgressForm progressForm;
Thread thread;
bool disposed = false;
public WaitIndicator()
{
progressForm = new ProgressForm();
thread = new Thread(_ => progressForm.ShowDialog());
thread.Start();
}
public void Dispose()
{
Dispose(true);
}
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
thread.Abort();
progressForm = null;
}
disposed = true;
}
}
class ProgressForm : Form
{
public ProgressForm()
{
ControlBox = false;
ShowInTaskbar = false;
StartPosition = FormStartPosition.CenterScreen;
TopMost = true;
FormBorderStyle = FormBorderStyle.None;
var progreassBar = new ProgressBar() { Style = ProgressBarStyle.Marquee,
Size = new System.Drawing.Size(200, 20),
ForeColor = Color.Orange, MarqueeAnimationSpeed = 40 };
Size = progreassBar.Size;
Controls.Add(progreassBar);
}
}
and usage will be like:
using (new WaitIndicator())
{
}