[Mono-bugs] [Bug 687203] New: Form does not update and later deadlocks when using Invoke from a timer & moving window

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Wed Apr 13 08:26:58 EDT 2011


https://bugzilla.novell.com/show_bug.cgi?id=687203

https://bugzilla.novell.com/show_bug.cgi?id=687203#c0


           Summary: Form does not update and later deadlocks when using
                    Invoke from a timer & moving window
    Classification: Mono
           Product: Mono: Class Libraries
           Version: 2.10.x
          Platform: PC
        OS/Version: Windows 7
            Status: NEW
          Severity: Critical
          Priority: P5 - None
         Component: Windows.Forms
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: yosilevy at gmail.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---
           Blocker: ---


Created an attachment (id=424700)
 --> (http://bugzilla.novell.com/attachment.cgi?id=424700)
Sample project

User-Agent:       Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64;
Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729;
Media Center PC 6.0; .NET4.0C; .NET4.0E; MALC)

App has a simple win-form with 1 label and another background form that waits
for WM_DEVICECHANGE notifications from windows to monitor device plug/unplug.
When a device change is detected, we run a timer to push forward actual
processing since multiple such notifications are sent by Windows.

When we try to use a simple Invoke from the timer, as such, it does not update
form if we move the form while all this is happening.

        private void PerformDeviceChange(object state)
        {
            this.Invoke(new UpdateDelegate(UpdateProc));
        }

        void UpdateProc()
        {
            // increment text on label
            label1.Text = (Convert.ToInt32(label1.Text) + 1).ToString();
        }

Doing this directly, without a timer works. Offcourse this works for .NET.
Once this happens, continuing to do so many times will result in the process
later failing to exit - deadlocked in GDIPLUS.


Reproducible: Always

Steps to Reproduce:
1. Run sample app
2. Use any USB device that you have and plug in - see number on label increment
3. Now unplug device - same increment.
4. Now plug back while dragging window - label will not be updated (try a few
times)...
Actual Results:  
Label will not update every time I plug/unplug a device if I move the window
while doing so.


Expected Results:  
Label to be updated every time and process to exit even if I plug/unplug 20
times...

-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.


More information about the mono-bugs mailing list