|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Adding ActiveX controls at runtime and threadingactivex controls to our windows form. This process in itself works fine however we would like to push this processing to a thread but are stumped so far. Our goal is simply to allow the form to fully display while the controls are being added. Preferrably with a progressbar to let them know that the form is still being built. Here are some snippets. Private Sub Form_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown Dim myThread As Threading.Thread myThread = New Threading.Thread(AddressOf load_udfSections) myThread.SetApartmentState(Threading.ApartmentState.STA) myThread.Start() End Sub Private Sub load_udfSections() ... udfSection = New AxTdF_DynamicUDF.AxDynUDF udfSection.BeginInit() udfSection.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) udfSection.Enabled = True udfSection.Visible = False udfSection.Location = New System.Drawing.Point(ToolStripContainer1.ContentPanel.Margin.Left, currentTop) udfSection.Name = "AxDynUDF" & CStr(controlIndex + 1) With ToolStripContainer1.ContentPanel axWidth = .Width - (.Margin.Left + .Margin.Right) End With udfSection.Size = New System.Drawing.Size(axWidth, 1) ToolStripContainer1.ContentPanel.Invoke(New addControl(AddressOf addControlToToolstrip), udfSection) udfSection.EndInit() udfSection.load_Controls(CShort(reader("ControlGroupID")), True) ..... End Sub There is a delegate called addcontroltoToolstrip for the following function. Private Sub addControlToToolstrip(ByVal activexControl As AxTdF_DynamicUDF.AxDynUDF) ToolStripContainer1.ContentPanel.Controls.Add(activexControl) End Function The invoke on the toolstrip seems to work fine but then when we try to call endinit() it errors telling us that the control has been modified in a different thread. Any ideas? Only been using .NET for a week so there is no chance of offending me. In VB6 we would have just started a timer in the show event of the form which would let the event exit and then the timer would process our lengthy code. Ugly but it at least allowed the form to fully display before adding the remaining controls. Looking for something a little bit more interactive. Glenn Welker On Mon, 26 Jun 2006 08:47:53 -0400, Toe Dipper
<toedip***@discussions.microsoft.com> wrote: Show quoteHide quote >In short we have a lengthy process when a form is loaded that adds Based on what you posted, you are essentially continuing what would>activex controls to our windows form. This process in itself works >fine however we would like to push this processing to a thread but are >stumped so far. > >Our goal is simply to allow the form to fully display while the >controls are being added. Preferrably with a progressbar to let them >know that the form is still being built. > >Here are some snippets. > > Private Sub Form_Shown(ByVal sender As Object, ByVal e As >System.EventArgs) Handles Me.Shown > Dim myThread As Threading.Thread > myThread = New Threading.Thread(AddressOf load_udfSections) > myThread.SetApartmentState(Threading.ApartmentState.STA) > myThread.Start() > End Sub > >Private Sub load_udfSections() > ... > udfSection = New AxTdF_DynamicUDF.AxDynUDF > > udfSection.BeginInit() > udfSection.Anchor = >CType(((System.Windows.Forms.AnchorStyles.Top Or >System.Windows.Forms.AnchorStyles.Left) _ > Or System.Windows.Forms.AnchorStyles.Right), >System.Windows.Forms.AnchorStyles) > udfSection.Enabled = True > udfSection.Visible = False > udfSection.Location = New >System.Drawing.Point(ToolStripContainer1.ContentPanel.Margin.Left, >currentTop) > udfSection.Name = "AxDynUDF" & CStr(controlIndex + 1) > > With ToolStripContainer1.ContentPanel > axWidth = .Width - (.Margin.Left + .Margin.Right) > End With > > udfSection.Size = New System.Drawing.Size(axWidth, 1) > > ToolStripContainer1.ContentPanel.Invoke(New >addControl(AddressOf addControlToToolstrip), udfSection) > udfSection.EndInit() > > udfSection.load_Controls(CShort(reader("ControlGroupID")), True) > > ..... > End Sub > > >There is a delegate called addcontroltoToolstrip for the following >function. > >Private Sub addControlToToolstrip(ByVal activexControl As >AxTdF_DynamicUDF.AxDynUDF) > ToolStripContainer1.ContentPanel.Controls.Add(activexControl) > End Function > >The invoke on the toolstrip seems to work fine but then when we try to >call endinit() it errors telling us that the control has been modified >in a different thread. > >Any ideas? Only been using .NET for a week so there is no chance of >offending me. In VB6 we would have just started a timer in the show >event of the form which would let the event exit and then the timer >would process our lengthy code. Ugly but it at least allowed the form >to fully display before adding the remaining controls. Looking for >something a little bit more interactive. > >Glenn Welker normally happen in the Load Event, so I'm not sure why you want to use a separate thread to continue loading controls. Is there some other background process going on that is not shown in your code? In VB6, I used a similar concept which worked fine - show the main form ASAP, then continue with the load event. In VB2005, my experience, so far, hs been that this is a bit more difficult to implement from app to app as, in some cases, the main form has a tendency to do an undesirable repaint when adding and positioning controls after the main form is visible particularly when I have code in the Layout Event. Gene
Show quote
Hide quote
> We were really just trying to clean up a hack that has been in our>Based on what you posted, you are essentially continuing what would >normally happen in the Load Event, so I'm not sure why you want to use >a separate thread to continue loading controls. Is there some other >background process going on that is not shown in your code? > >In VB6, I used a similar concept which worked fine - show the main >form ASAP, then continue with the load event. In VB2005, my >experience, so far, hs been that this is a bit more difficult to >implement from app to app as, in some cases, the main form has a >tendency to do an undesirable repaint when adding and positioning >controls after the main form is visible particularly when I have code >in the Layout Event. > >Gene code too long. You are right we are trying to continue the load event. The code I have referenced takes up to 10 seconds. Without any progress indication to the user, it appears that the form has locked up. It seemed like I could load the controls in a background process while updating a progress bar in the main thread. This would have enabled the user to move the gui and get feedback on the progress while the background process finished. Our solution for VB6 seems to be less robust under vb 2005. Since the documentation for doevents points to multithreading it seems possible, although quite complicated. I appreciate your feedback. On Tue, 27 Jun 2006 09:13:18 -0400, Toe Dipper
<toedip***@discussions.microsoft.com> wrote: Show quoteHide quote > A common technique for a long load time (10 seconds is long) is to>> >>Based on what you posted, you are essentially continuing what would >>normally happen in the Load Event, so I'm not sure why you want to use >>a separate thread to continue loading controls. Is there some other >>background process going on that is not shown in your code? >> >>In VB6, I used a similar concept which worked fine - show the main >>form ASAP, then continue with the load event. In VB2005, my >>experience, so far, hs been that this is a bit more difficult to >>implement from app to app as, in some cases, the main form has a >>tendency to do an undesirable repaint when adding and positioning >>controls after the main form is visible particularly when I have code >>in the Layout Event. >> >>Gene > >We were really just trying to clean up a hack that has been in our >code too long. > >You are right we are trying to continue the load event. The code I >have referenced takes up to 10 seconds. Without any progress >indication to the user, it appears that the form has locked up. It >seemed like I could load the controls in a background process while >updating a progress bar in the main thread. This would have enabled >the user to move the gui and get feedback on the progress while the >background process finished. > >Our solution for VB6 seems to be less robust under vb 2005. Since the >documentation for doevents points to multithreading it seems possible, >although quite complicated. > >I appreciate your feedback. display a sort of spash screen (not the VB2005 splash screen) as soon as the main form is displayed where the splash form contains a label that is updating iindicating to the user that there is activity. PhotoShop is a good example if you are familiar with that program. Gene
ASP.NET web application - date conversions UK date format?
Building a single EXE file in VB 2005? What errors are not trappable? Resolution in VB.NET Lost with creating a db connection... help!? passing values to html document from .Net app Is it possible to order a Visual Basic 2005 Express CD from Microsoft? Dynamically Creating A CSS Class Merging workbooks Microsoft Access Tab Controls |
|||||||||||||||||||||||