Scenario : thread modifies the data which is used by canvas which results in a crash in paint event.Current Solution : used mutex to share the data between canvas and thread.Issue: we are displaying progress info of thread in a dialog. mutex locks (in canvas paint event) main thread and the progress info dialog hangs.

Reading data so you can draw it and at the same time modifying that data is bad.
Making a thread to lock the GUI is also bad.

If you can't use doublemax's proposals, I would break the data into chunks. While the working thread modify one chunk, the GUI reads and draws other chunk. When a chunk is done in the thread, it posts a message to GUI so it can operate with that chunk.