|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
BeginInvoke with a property?How do I access a property from another thread in VB'05? Thanks public class frmblah inherits system.windows.forms.form private mCount as integer private property Count as integer get return mCount end get set (value as integer) mCount = value end set end property private sub updatecount if me.InvokeRequired then ' '??????? ' else me.count += 1 end if end sub end class Well, I am begininvoking the UpdateCount instead and it appears to be
working. Show quoteHide quote "AMDRIT" <amd***@hotmail.com> wrote in message news:enmtp3uaGHA.3328@TK2MSFTNGP02.phx.gbl... > Hello everyone, > > How do I access a property from another thread in VB'05? Thanks > > public class frmblah > inherits system.windows.forms.form > > private mCount as integer > > private property Count as integer > get > return mCount > end get > set (value as integer) > mCount = value > end set > end property > > private sub updatecount > if me.InvokeRequired then > ' > '??????? > ' > else > me.count += 1 > end if > end sub > > end class > This is for .NET not VB Classic, you might want to try a classic VB group
instead Show quoteHide quote "AMDRIT" <amd***@hotmail.com> wrote in message news:OgL1l%23uaGHA.4520@TK2MSFTNGP03.phx.gbl... > Well, I am begininvoking the UpdateCount instead and it appears to be > working. > > > "AMDRIT" <amd***@hotmail.com> wrote in message > news:enmtp3uaGHA.3328@TK2MSFTNGP02.phx.gbl... >> Hello everyone, >> >> How do I access a property from another thread in VB'05? Thanks >> >> public class frmblah >> inherits system.windows.forms.form >> >> private mCount as integer >> >> private property Count as integer >> get >> return mCount >> end get >> set (value as integer) >> mCount = value >> end set >> end property >> >> private sub updatecount >> if me.InvokeRequired then >> ' >> '??????? >> ' >> else >> me.count += 1 >> end if >> end sub >> >> end class >> > > "Brian Henry" <nospam@nospam.com> schrieb: Mhm... The question is clearly related to VB.NET.> This is for .NET not VB Classic, you might want to try a classic VB group > instead -- M S Herfried K. Wagner M V P <URL:http://dotnet.mvps.org/> V B <URL:http://classicvb.org/petition/> On 2006-04-28, AMDRIT <amd***@hotmail.com> wrote:
Show quoteHide quote > Hello everyone, You don't need to worry about InvokeRequired here, that's for accessing> > How do I access a property from another thread in VB'05? Thanks > > public class frmblah > inherits system.windows.forms.form > > private mCount as integer > > private property Count as integer > get > return mCount > end get > set (value as integer) > mCount = value > end set > end property > > private sub updatecount > if me.InvokeRequired then > ' > '??????? > ' > else > me.count += 1 > end if > end sub > > end class UI components on the UI thread. For ordinary properties, even if they are properties of a Form class, you can just set them from any thread (watching out for thread contention of course). Show quoteHide quote > > David,
Thanks for the response. The actual issue I am working through is a splash screen. I have a component library that has a base form and a splash screen form. All my application forms derive from the custom form, which now has two additional methods, (ShowWait, HideWait). These methods will be used primarly for long running processes called by the custom form, however, the derived form could make use of it as well. In VB'03 is was working great, my problem is in VB'05. The splash screen is supposed to fade in and out over time while it is displayed. I encountered two issues from the conversion. 1. I do not have access to doevents. Since control libraries do not have access to the My namespace, I have been exploring Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase. I haven't found a way to associate my ExecutingAssembly with my library. Threading.Thread.Sleep doesn't seem to do the job, of cource that could be a result of my second issue. 2. Accessing the splash screens form methods and properties cause: a. System.Threading.ThreadAbortException b. System.ArgumentException c. System.InvalidOperationException d. System.Transactions Critical at System.Windows.Forms.Control.SetVisibleCore(Boolean value) What I have going on is a do...while loop that is calling the fade routine when the splash screen is visible. public sub DoFading do while not done call Fade loop me.hide() me.close() end sub private sub Fade dim fadedirection as fadetypes if me.opacity <= 0 then fadedirection = fadetypes.up elseif me.opacity >= 1 then fadedirection = fadetypes.down end if select case fadedirection case fadetypes.up me.opacity += pintStepping case else me.opacity -= pintStepping end select end sub I changed my call to fade to Me.Invoke(New Windows.Forms.MethodInvoker(AddressOf Fade)) as well as the logic to hide and close the form I don't know what I am doing wrong, but it is not behaving like it used to. Show quoteHide quote "david" <da***@woofix.local.dom> wrote in message news:slrne55052.o10.david@localhost.localdomain... > On 2006-04-28, AMDRIT <amd***@hotmail.com> wrote: >> Hello everyone, >> >> How do I access a property from another thread in VB'05? Thanks >> >> public class frmblah >> inherits system.windows.forms.form >> >> private mCount as integer >> >> private property Count as integer >> get >> return mCount >> end get >> set (value as integer) >> mCount = value >> end set >> end property >> >> private sub updatecount >> if me.InvokeRequired then >> ' >> '??????? >> ' >> else >> me.count += 1 >> end if >> end sub >> >> end class > > You don't need to worry about InvokeRequired here, that's for accessing > UI components on the UI thread. For ordinary properties, even if they > are properties of a Form class, you can just set them from any thread > (watching out for thread contention of course). > > >> >> On 2006-04-28, AMDRIT <amd***@hotmail.com> wrote:
Show quoteHide quote > David, VB05 is a bit more persnickety about calling UI components from the> > Thanks for the response. The actual issue I am working through is a splash > screen. > > I have a component library that has a base form and a splash screen form. > All my application forms derive from the custom form, which now has two > additional methods, (ShowWait, HideWait). These methods will be used > primarly for long running processes called by the custom form, however, the > derived form could make use of it as well. > > In VB'03 is was working great, my problem is in VB'05. The splash screen is > supposed to fade in and out over time while it is displayed. I encountered > two issues from the conversion. wrong thread. > I'm not sure why you need doEvents here, but it can be found at > 1. I do not have access to doevents. Since control libraries do not have > access to the My namespace, I have been exploring > Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase. I > haven't found a way to associate my ExecutingAssembly with my library. System.Windows.Forms.Application.DoEvents(). Of course, it needs to be called from the UI thread. > Threading.Thread.Sleep doesn't seem to do the job, of cource that could be a Seems like a timer would be more appropriate. In fact, the Forms.Timer> result of my second issue. > > 2. Accessing the splash screens form methods and properties cause: > a. System.Threading.ThreadAbortException > b. System.ArgumentException > c. System.InvalidOperationException > d. System.Transactions Critical at > System.Windows.Forms.Control.SetVisibleCore(Boolean value) > > What I have going on is a do...while loop that is calling the fade routine > when the splash screen is visible. component will even handle calling you on the correct thread. Show quoteHide quote > It's hard to tell from this snippet. I'm not even sure the threading is> public sub DoFading > do while not done > call Fade > loop > > me.hide() > me.close() > > end sub > > private sub Fade > > dim fadedirection as fadetypes > > if me.opacity <= 0 then > fadedirection = fadetypes.up > elseif me.opacity >= 1 then > fadedirection = fadetypes.down > end if > > select case fadedirection > case fadetypes.up > me.opacity += pintStepping > case else > me.opacity -= pintStepping > end select > > end sub > > I changed my call to fade to Me.Invoke(New > Windows.Forms.MethodInvoker(AddressOf Fade)) > > as well as the logic to hide and close the form > > I don't know what I am doing wrong, but it is not behaving like it used to. the error here is from the UI thread issues (usually you get an InvalidOperationException when that happens). One trick I like to do for these types of problems is have the form methods handle their own invoke requirements, like... Private Sub Fade() If Me.InvokeRequired Then Me.Invoke(New MethodInvoker(AddressOf Fade)) Exit Sub End If ' Do the real work Show quoteHide quote > > "david" <da***@woofix.local.dom> wrote in message > news:slrne55052.o10.david@localhost.localdomain... >> On 2006-04-28, AMDRIT <amd***@hotmail.com> wrote: >>> Hello everyone, >>> >>> How do I access a property from another thread in VB'05? Thanks >>> >>> public class frmblah >>> inherits system.windows.forms.form >>> >>> private mCount as integer >>> >>> private property Count as integer >>> get >>> return mCount >>> end get >>> set (value as integer) >>> mCount = value >>> end set >>> end property >>> >>> private sub updatecount >>> if me.InvokeRequired then >>> ' >>> '??????? >>> ' >>> else >>> me.count += 1 >>> end if >>> end sub >>> >>> end class >> >> You don't need to worry about InvokeRequired here, that's for accessing >> UI components on the UI thread. For ordinary properties, even if they >> are properties of a Form class, you can just set them from any thread >> (watching out for thread contention of course). >> >> >>> >>> > > On Fri, 28 Apr 2006 16:34:12 -0500, "AMDRIT" <amd***@hotmail.com> wrote: You don't need it if your fade code is running on a thread you've created.>1. I do not have access to doevents. Show quoteHide quote >2. Accessing the splash screens form methods and properties cause: If you look at that code (assuming you've wrapped that call to Fade() inside of an invoke like you described) you will> a. System.Threading.ThreadAbortException > b. System.ArgumentException > c. System.InvalidOperationException > d. System.Transactions Critical at >System.Windows.Forms.Control.SetVisibleCore(Boolean value) > >What I have going on is a do...while loop that is calling the fade routine >when the splash screen is visible. > >public sub DoFading > do while not done > Me.Invoke(New Windows.Forms.MethodInvoker(AddressOf Fade)) > loop > > me.hide() > me.close() > >end sub > see that your calls to hide() and close() are not using a MethodInvoker. These calls need to be executed from the controls thread and will need to be invoked as well: public sub DoFading MethodInvoker fader = New MethodInvoker(AddressOf Fade) do while not done Me.Invoke(fader) 'Really should think about a sleep here so as not to eat cpu time loop Me.Invoke(New MethodInvoker(AddressOf Close()) end sub This is making the assumption you have launched DoFading on a new thread, which it seems like you have done. Thanks David and Chris, everything appears to be right again.
Show quoteHide quote "Chris Chilvers" <kee***@dynafus.com> wrote in message news:ov165212jbai81gps1fqvmau6bcl5nhd64@4ax.com... > On Fri, 28 Apr 2006 16:34:12 -0500, "AMDRIT" <amd***@hotmail.com> wrote: > >>1. I do not have access to doevents. > > You don't need it if your fade code is running on a thread you've created. > > >>2. Accessing the splash screens form methods and properties cause: >> a. System.Threading.ThreadAbortException >> b. System.ArgumentException >> c. System.InvalidOperationException >> d. System.Transactions Critical at >>System.Windows.Forms.Control.SetVisibleCore(Boolean value) >> >>What I have going on is a do...while loop that is calling the fade routine >>when the splash screen is visible. >> >>public sub DoFading >> do while not done >> Me.Invoke(New Windows.Forms.MethodInvoker(AddressOf Fade)) >> loop >> >> me.hide() >> me.close() >> >>end sub >> > > If you look at that code (assuming you've wrapped that call to Fade() > inside of an invoke like you described) you will > see that your calls to hide() and close() are not using a MethodInvoker. > These calls need to be executed from the > controls thread and will need to be invoked as well: > > public sub DoFading > MethodInvoker fader = New MethodInvoker(AddressOf Fade) > > do while not done > Me.Invoke(fader) > 'Really should think about a sleep here so as not to eat cpu time > loop > > Me.Invoke(New MethodInvoker(AddressOf Close()) > end sub > > This is making the assumption you have launched DoFading on a new thread, > which it seems like you have done.
Export nText as Files
At a loss figuring out if an IP is on LAN or INET DWORDS ? LONG? - I need to create constants for the following Function call problem How to Obsolete two related classes? Calling PaintBox Paint event Invalid Cast Errors VS.NET 2005 Invoking apps within VB scope and object assignment |
|||||||||||||||||||||||