Click here to Skip to main content
14,299,406 members

WinForms lock detector

Rate this:
5.00 (1 vote)
Please Sign up or sign in to vote.
5.00 (1 vote)
5 Apr 2008CPOL
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, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

diamond
Netherlands Netherlands
No Biography provided

Comments and Discussions

 
-- There are no messages in this forum --
Article
Posted 5 Apr 2008

Stats

21.1K views
406 downloads
16 bookmarked