[Mono-bugs] [Bug 430477] Debug.Assert() does not work in winform apps

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Mon Sep 29 05:57:35 EDT 2008


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

User robertj at gmx.net added comment
https://bugzilla.novell.com/show_bug.cgi?id=430477#c4


Robert Jordan <robertj at gmx.net> changed:

           What    |Removed                                         |Added
----------------------------------------------------------------------------
                 CC|                                                |robertj at gmx.net




--- Comment #4 from Robert Jordan <robertj at gmx.net>  2008-09-29 03:57:34 MDT ---
Jon, you probably did not compile with -d:DEBUG

Steve, using MessageBox alone is a bad idea because Debug.Assert might be
called
from another thread. You'd need to invoke MessageBox from the main thread,
maybe
using a synchronization context:


SyncronizationContext ctx;
DialogResult result;

public GuiListener ()
{
    // assumes GuiListener..ctor is called from the main thread.
    SyncronizationContext ctx = SynchronizationContext.Current
        as WindowsFormsSynchronizationContext;
    if (ctx == null) throw new InvalidOperationException ();
}


DialogResult ShowDebugAssertMsg(string message, string detailMessage)
{
    result = DialogResult.Ignore;

    ctx.Send (delegate(object state) {
        result = MessageBox.Show (...)
    }, null);

    return result;
}


For .NET 1.1 we'd probably need to resort to Control.Invoke:

DialogResult ShowDebugAssertMsg(string message, string detailMessage)
{
    result = DialogResult.Ignore;

    // FIXME: is there another way to get a Control instance from the main
thread?
    Control ctl = Form.ActiveForm;
    if (ctl != null) {
        ctl.Invoke (delegate {
            result = MessageBox.Show (...)
        });
    }

    return result;
}


-- 
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