Re: Updating controls on a form
Kelly Baker <[email protected]>
| Newsgroups | gmane.comp.windows.devel.dotnet.winforms |
|---|---|
| Message-ID | <008701c76f34$c82e5290$588af7b0$@com> |
No, because I cannot predict what future users of this dll will name their controls. Right not I just have 12 variables (private shared) exposed through read-only properties. I raise the NewData event when I have updated the variables, and the executable responds by reading the properties. I have even tried reading the properties into variables in the Windows exe, but when I try to update the Windows controls from these variables, I still get the cross-thread error. -----Original Message----- From: Discussion forum for developers using Windows Forms to build apps and controls [mailto:[email protected]] On Behalf Of Vince P Sent: Saturday, March 24, 2007 11:27 PM To: [email protected] Subject: Re: [DOTNET-WINFORMS] Updating controls on a form In your DLL, can you make a member to store the Control object that is using it? public class DllClass { private System.Windows.Forms.Control control; public DllClass(Control control) { this.control = control; } private void CallFromOtherThread() { if(control.InvokeRequired) { control.BeginInvoke(new MethodInvoker(this.CallFromOtherThread), null); } else { // your code here } } } - THESE are the times that try men's souls. The summer soldier and the sunshine patriot will, in this crisis, shrink from the service of their country; but he that stands by it now, deserves the love and thanks of man and woman. Tyranny, like hell, is not easily conquered; yet we have this consolation with us, that the harder the conflict, the more glorious the triumph. > -----Original Message----- > From: Discussion forum for developers using Windows Forms to build apps > and controls [mailto:[email protected]] On Behalf Of > Kelly Baker > Sent: Saturday, March 24, 2007 21:37 > To: [email protected] > Subject: [DOTNET-WINFORMS] Updating controls on a form > > Unless my app is EXTREMELY simple, I get the cross-threading error > message > regularly when updating controls on a Windows form. > > My latest example involves a dll that runs a System.Threading.Timer, > updating private shared variables. When it finishes updating, it > raises a > NewData event. My app responds to that event by updating display > controls > (labels in this case). I have to use a delegate and update them like > this: > > Private Sub SetText(ByVal [text] as String) > If Me.Messages.InvokeRequired Then > Dim d as New SetTextCallBack(AddressOf SetText) > Me.Invoke(d, New Object() {[text]}) > Else > Me.Messages.Text = [text] > End If > End Sub > > I have to write a different routine like this for each control on the > form > that I want to update. Is there a better way? Please?