Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

WinForms lock detector

0.00/5 (No votes)
5 Apr 2008 1  
A nice and pretty simple C# class to detect if a GUI thread can not process window messages (and user actions).

lockdetector_bin

Introduction

If your application performs long operations sometimes and you do not want to spend time writing specialized code to show an indicator in every such place, then this class might help you.

Background

The idea is very simple. User actions such as keyboard and mouse events are just window messages. So, we can assume that your application is locked (processing a long operation) when your GUI thread (main thread, in most cases) can not process window messages.

The LockDetector class periodically calls BeginInvoke on some control from the target thread to send a window message. Then, if the delegate has not been called during a specified timeout interval, the OnLockDetected event is called in the detector thread and then can be processed in parallel with the thread being monitored.

Using the code

Check this very short example of how to use the class:

private LockDetector detector;
private void TestForm_Load(object sender, EventArgs e)
{
    detector = new LockDetector(this, 300); // detection timeout - 300ms
    detector.OnLockDetected += new 
      LockDetector.onLockDetectedDelegate(detector_OnLockDetected);
    detector.OnLockFinished += new 
      LockDetector.onLockFinishedDelegate(detector_OnLockFinished);
    detector.Start();
}

private void TestForm_FormClosing(object sender, FormClosingEventArgs e)
{
    detector.Dispose();
    detector = null;
}

void detector_OnLockFinished()
{
    MessageBox.Show("FINISHED");
}

void detector_OnLockDetected()
{
    MessageBox.Show("DETECTED");
}

private void button1_Click(object sender, EventArgs e)
{
    Thread.Sleep(5000);
}

The sources include a more advanced example.

History

  • 06 Apr 2008 - Initial release.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here