<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hello Johnnie,<br>
    <br>
    Is the worker function (in the worker class) running on a separate
    thread? Is it started using a Thread/ThreadPool/BeginInvoke? This is
    probably the case, but it's not clear from the code you've provided.
    Can you show the code that calls <font face="Lucida Grande"
      size="3">radiazerMain? Main.cs?<br>
      <br>
      Normally, only one thread in your application runs the GUI event
      loop (Application.Run() for WinForms, GTK# must have something
      similar). Only this thread can create and change windows
      (including all controls/widgets on those windows).<br>
      <br>
      The usual way to work around this restriction is by using the
      Invoke/BeginInvoke calls (in WinForms) on a window/form/control,
      or in some other way "post" a request to call a function on the
      GUI thread. The specified callback function is then called on the
      right thread and can update the GUI.<br>
      <br>
      Another option is to expose the worker progress as a public
      property, and create a Timer (again WinForms, GTK probably has
      something similar) to periodically read this property and update
      the GUI.<br>
      <br>
      Another thing you can't/shouldn't do: run the worker function on
      the GUI thread (for example through a direct call from a Window
      load function or button click handler). This will block the GUI
      thread - and all event processing including updates - until the
      worker has finished, resulting in the well known "Application is
      not responding" error on Windows.<br>
      <br>
      I hope this helps.<br>
      <br>
      Ivo<br>
    </font><br>
    <div class="moz-cite-prefix">Op 6-11-2012 22:55, Johnnie Odom
      schreef:<br>
    </div>
    <blockquote
      cite="mid:509932F9020000F50001F65D@mail.escambia.k12.fl.us"
      type="cite">
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">Hello Everyone,</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">This is my first day on the mailing list, and
          as it is I have a question regarding some odd behavior I am
          encountering. I have also posted this message to the GTK# list
          as I am not sure which is the more appropriate venue.</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">I am writing an application on OS X 10.8
          using C#, Mono 2.10.9 and MonoDevelop 3.0.4 (including the
          Designer views) that makes some simple changes to LDAP. As
          part of it, I decided to get fancy with GTK#. All is going
          well, except for one behavior.</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">I have created a window class to display a
          progress bar and stop button. I have further created a
          function in this class to update the progress bar with a
          fraction and text message. In my code, I create a new instance
          of this window class when real work is happening in another
          class, and then populate it after every ten iterations of a
          foreach loop.</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">My problem is that when the window is created
          FROM THE CLASS DOING REAL WORK, it displays neither the
          progress bar widget, nor the button. It displays only the
          window title and then white space below. Only this window
          displays this behavior -- several other windows that I create
          over the course of the application all display appropriately.</font>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">If I instead create the progress bar window
          in Main.cs and call Show(), it will display just fine. I can
          even call the function to set its status from Main.cs and it
          will display correctly.</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">I have tried creating the window in Main.cs
          and passing it to the class that does the real work later. I
          have tried creating it in other classes besides the one that
          does the work. In all cases the behavior is the same -- if the
          window is created and used solely in Main.cs it will display
          fine, but if it it ever invoked or created from anywhere else
          (whether or not it is created in another class or in Main.cs)
          it will display incorrectly. </font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">I have taken to using the debugger and break
          points to isolate the behavior. If I set a breakpoint
          immediately after the window is created, it is still blank --
          that is, I do not think it is a case that the window is just
          not keeping pace with any updates I am sending. I have also
          compared the various values of the window objects and
          attributes when it is displayed (created and used solely in
          Main.cs) and when it is not (displayed in any other class) and
          they seem to be identical.</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">So, I am at a loss, and I would appreciate
          any advice you might give.</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">I can send any code you think would prove
          useful, but for now I am sending you the class where I am
          trying to call the window, and the contents of the window's
          code-behind.</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">Thank you for any guidance you can give.</font>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">Johnnie Odom</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">Network Services</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">School District of Escambia County</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">****************</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
        <span style="FONT-FAMILY:"Tahoma,sans-serif"
          ;FONT-SIZE:"13px" ;COLOR:"rgb(0, 0, 0)""><span
            style="background-color: rgb(255, 255, 255); color: rgb(0,
            0, 0); font-weight: normal; line-height: normal;
            font-family: Tahoma,sans-serif; letter-spacing: normal;
            white-space: normal; font-variant: normal; font-style:
            normal; text-align: start; text-transform: none; font-size:
            13px; text-indent: 0px; float: none; word-spacing: 0px;
            display: inline ! important" charset="utf-8">The function
            from the calling class:</span></span><br>
        <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">public string radiazerMain(string
          radiazerGroup, string radiazerProfile){</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">Progression MarathonBar = new Progression();</font>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">MarathonBar.Show();</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">string monologger = "";</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">string lastLine = "Radiazer completed current
          run." + Environment.NewLine;</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">Array usersToModify =
          getGroupMembers(radiazerGroup);</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">string[] radiusAttribs = new
string[]{"dialupAccess","radiusArapFeatures","radiusArapSecurity","radiusArapZoneAccess","radiusAuthType","radiusCallbackId","radiusCallbackNumber","radiusCalledStationId","radiusCallingStationId","radiusCheckItem","radiusClass","radiusClientIPAddress","radiusExpiration","radiusFilterId","radiusFramedAppleTalkLink","radiusFramedAppleTalkNetwork","radiusFramedAppleTalkZone","radiusFramedCompression","radiusFramedIPAddress","radiusFramedIPNetmask","radiusFramedIPXNetwork","radiusFramedMTU","radiusFramedProtocol","radiusFramedRoute","radiusFramedRouting","radiusGroupName","radiusHint","radiusHuntgroupName","radiusIdleTimeout","radiusLoginIPHost","radiusLoginLATGroup","radiusLoginLATNode","radiusLoginLATPort","radiusLoginLATService","radiusLoginService","radiusLoginTCPPort","radiusLoginTime","radiusPasswordRetry","radiusPortLimit","radiusProfileDn","radiusPrompt","radiusProxyToRealm","radiusRealm","radiusReplicateToRealm","radiusReplyItem","radiusServiceType","radiusSessionTimeout","rad
iusSimultaneousUse","radiusStripUserName","radiusTerminationAction","radiusTunnelAssignmentId","radiusTunnelClientEndpoint","radiusTunnelMediumType","radiusTunnelPassword","radiusTunnelPreference","radiusTunnelPrivateGroupId","radiusTunnelServerEndpoint","radiusTunnelType","radiusUserCategory","radiusVSA"};</font>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">LdapAttributeSet profileTemplate =
          LdapAttributeSetFiltered(radiazerProfile, radiusAttribs);</font>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">profileTemplate.Add(new
          LdapAttribute("radiusProfileDn", radiazerProfile));</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">int totalUsersCount = usersToModify.Length;</font>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">int currentUserCount = 0;</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">int errorCount = 0;</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">MarathonBar.Show();</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">foreach(string userToModify in
          usersToModify){</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">currentUserCount++;</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">try{</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">monologger = monologger +
          radiazeModifyUser(userToModify, profileTemplate);</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">}</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">catch(LdapException LdapFailure){</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">monologger = monologger + "User " +
          userToModify + " failed. Error is " + LdapFailure.ToString() +
          Environment.NewLine;</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">errorCount++;</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">}</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">if(((currentUserCount % 10) == 0) ||
          ((totalUsersCount - currentUserCount) < 10)){</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">MarathonBar.setProgress(((double)currentUserCount
          / totalUsersCount), totalUsersCount , currentUserCount,
          errorCount, userToModify);</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">}</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">if(MarathonBar.cancelFromUser){</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">lastLine = "Radiazer cancelled by user." +
          Environment.NewLine;</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">break;</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">}</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">}</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">MarathonBar.Destroy();</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">monologger = monologger + lastLine;</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">return monologger;</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">}</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">*************</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">The Code-Behind:</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">using System;</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">namespace Radiazer2</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">{</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">public partial class Progression : Gtk.Window</font>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">{</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">public bool cancelFromUser = false;</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">public Progression () : </font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">base(Gtk.WindowType.Toplevel)</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">{</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">this.Build ();</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">}</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">public void setProgress(double
          fractionOfProgress, int totalUnits, int finishedUnits, int
          errorUnits, string finishedUser){</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">this.progressIndicator.Fraction =
          fractionOfProgress;</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">this.progressIndicator.Text = "Completed " +
          finishedUnits + " of " + totalUnits + " with " + errorUnits +
          " errors. Current user is " + finishedUser + ".";</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">}</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <br>
      </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">protected void OnStopUserClicked (object
          sender, EventArgs e)</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">{</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">cancelFromUser = true;</font> </p>
      <p style="margin-top: 0; margin-bottom: 0"> <font face="Lucida
          Grande" size="3">}</font> </p>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
Mono-devel-list mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Mono-devel-list@lists.ximian.com">Mono-devel-list@lists.ximian.com</a>
<a class="moz-txt-link-freetext" href="http://lists.ximian.com/mailman/listinfo/mono-devel-list">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>