Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to prevent a Not Responding message on a window's title bar?

I use VS2010 and C# to build a desktop application. This application has one form with a huge task which takes a lot of time to complete. When this form is initialized it works perfectly, except it shows “Not Responding” on the title bar, like the picture shows:

enter image description here

After completing all tasks, it shows the desired output. Why is this message shown, and how do I prevent it?

like image 757
shamim Avatar asked Jun 14 '12 02:06

shamim


2 Answers

You need to use a BackgroundWorker so that the time consuming task will run in a separate thread asynchronously. That will allow Windows multitasking to make the UI responsive. You should use a wait cursor or some other visual indicator to let the user know that your application is busy.

From MSDN MSDN BackgroundWorker

The BackgroundWorker class allows you to run an operation on a separate, dedicated thread. Time-consuming operations like downloads and database transactions can cause your user interface (UI) to seem as though it has stopped responding while they are running. When you want a responsive UI and you are faced with long delays associated with such operations, the BackgroundWorker class provides a convenient solution.

To execute a time-consuming operation in the background, create a BackgroundWorker and listen for events that report the progress of your operation and signal when your operation is finished. You can create the BackgroundWorker programmatically or you can drag it onto your form from the Components tab of the Toolbox. If you create the BackgroundWorker in the Windows Forms Designer, it will appear in the Component Tray, and its properties will be displayed in the Properties window.

To set up for a background operation, add an event handler for the DoWork event. Call your time-consuming operation in this event handler. To start the operation, call RunWorkerAsync. To receive notifications of progress updates, handle the ProgressChanged event. To receive a notification when the operation is completed, handle the RunWorkerCompleted event.

like image 70
Abraham Avatar answered Sep 22 '22 13:09

Abraham


You need to run your huge task on a background thread so as not to lock up the UI (main) thread.

like image 37
BlackSpy Avatar answered Sep 21 '22 13:09

BlackSpy