Forms :: Using The "Invoke" Method From Another Form
Jul 14, 2009
I've run into a bit of a problem.. I am unsure as to how many people know how "IRC" Servers work here but basically, i'll explain. We are re-creating an IRC Client we made for our Chat site in VB.NET originally vb6. We have serveral different forms but the main problme we are having at the moment is FrmMain is where you login to the servers, it grabs your data from our MySQL database such as "Nick, Gender, Font" etc. Then proceeds with connection to IRC server on Raw 001 we know the connection to the IRC server has been established... so therefore we open up FrmAuth which in this case they can see roomlist etc. We are unable to get FrmAuth to load probably.
We originally had this working opening up FrmAuth before the connection to IRC server has been established.. This really is no good for us causes alot of errors etc. So when we use just simply "me.show()" the form loads but freezes we tried doing Me.Invoke(New Del(AddressOf me.show))
however, this didnt work in which I assume that is because the "FrmAuth" hasn't yet loaded the GUI thread therefore there is no Thread to invoke so we tried FrmMain.Invoke(New Del(AddressOf me.show))
This didn't work either i assume you cannot access another forms Invoke method?
we are receiving the error A first chance exception of type.'System.InvalidOperationException' occurred in System.Windows.Forms.dll which i assume has something to do with it but not quite sure..
So my question comes down to the fact of, how do we open up FrmAuth without it freezing? Is there a way to access the invoke method on another form?
We are re-creating an IRC Client we made for our Chat site in VB.NET originally vb6
We have serveral different forms but the main problme we are having at the moment is
FrmMain is where you login to the servers, it grabs your data from our MySQL database such as "Nick, Gender, Font" etc. Then proceeds with connection to IRC server on Raw 001 we know the connection to the IRC server has been established... so therefore we open up FrmAuth which in this case they can see roomlist etc. We are unable to get FrmAuth to load probably.
We originally had this working opening up FrmAuth before the connection to IRC server has been established.. This really is no good for us causes alot of errors etc.
So when we use just simply "me.show()" the form loads but freezes we tried doing
Me.Invoke(New Del(AddressOf me.show))
however, this didnt work in which I assume that is because the "FrmAuth" hasn't yet loaded the GUI thread therefore there is no Thread to invoke so we tried
FrmMain.Invoke(New Del(AddressOf me.show)) This didn't work either i assume you cannot access another forms Invoke method..?? we are receiving the error A first chance exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll which i assume has something to do with it but not quite sure..
So my question comes down to the fact of, how do we open up FrmAuth without it freezing? Is there a way to access the invoke method on another form?
I have been using a pretty slick generic invoke method for UI updating from background threads. I forget where I copied it from (converted it to VB.NET from C#), but here it is: Public Sub InvokeControl(Of T As Control)(ByVal Control As t, ByVal Action As Action(Of t))
1. On the main form a scanner class is instantiated that (in the scanner's constructor) sets the scanner settings (baud rate, parity, etc) and opens the scanner for use
2. A barcode is scanned (via a scanner connected to the device in a seral port) while on the main form
3. In the scanner class, the DataRecieved event gets the needed info from the scanned code.
4. Then that info is passed back to the main form to a method RunCommandCode (which takes the scanned info as an argument)
5. On the main form the RunCommandCode calls another method CommandCodeHandler, passing the scanned info again
6. In the CommandCodeHandler sub a method is called in a Utils class (SetSelectedTab), which interacts with the form itself (determines how many tabs exist on a tab control), which is the reason for the invoke in the first place
So, before I figured out I needed to use the Invoke method (and, more specifically, that the scanner was working in a different thread), I was getting an error in step 6 on the line that got the TabControl.TabPages.Count.
I am implementing a custom iDispatchLLInvoke handler for VB.NET - some of this is working.So Far - I have been able to intercept and provide custom handling of simple functions and property calls - but I am stuck when I try to set a property and get an error "Invalid Pointer (Exception from HRESULT: 0x80004003 (E_Pointer))".
I am using the new .NET 4.0 ICustomQueryInterface to do this. In Summary - I intercept and provide my own implementation of iDispatch - I load the dispIDs on the first call - and return a the dispID for each call within GetIDsOfNames - this ID is than passed to Invoke where reflection is used to get the value and return the result.
When I attempt to set a property - a call is made to GetIDsofNames and I return a valid dispID - the application than crashes with the error above and no call is made to Invoke.As a result - I am assuming that the issue relates to my interface definition been wrong becase the code never get's back to .NET code - see below for this code:
<ComImport(), Guid("00020400-0000-0000-C000-000000000046"), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)> _ Public Interface IDispatch Sub GetTypeInfoCount(ByRef pctInfo As UInt32)
I've created a MyFunc extension (in Module Extensions) for all the base types as well as generic arrays, ICollection(Of T) and Dictionary(Of String,T):
Function MyFunc(Of T)(a() As T) As String Function MyFunc(Of T)(collection As ICollection(Of T)) As String Function MyFunc(Of T)(dict As Dictionary(Of String,T)) As String
I want to invoke a method on a class that i have a reference to. The method that I want to call has a custom attributes. Currently I can find this attributes and call the property of my class Attribute.
is there a way to invoke that method ?
PS/ The project is written in vbnet, but I think the solution is the same in c#.
Is it possible to somehow invoke foo("SomeAwesomeString") from VBScript directly (i.e., without it having to launch an additional process)?
The use case is this: I am trying to write an 'extension' application for hMailServer (hMS), but hMS can only invoke VBscript scripts when an event happened. I can have the VBscript launch an .exe every time the event happened, but the processing involve opening and closing a connection to a back-end database. So, every invocation is very expensive. I had been thinking that I can reduce the expense by having a Service to maintain the connection (i.e., opening it once and re-open it if the connection closed). Plus by implementing the processing as background worker threads will result in a non-blocking processing + less process-starting overhead.
I have a COM component that I want to call using late-binding from VB.NET (using Primary Interop Assembly - PIA method). My IDL signature for the COM method looks like: HRESULT Send([in]BSTR bstrRequestData, [out]VARIANT *pvbstrResponseData, [out]VARIANT *pvnExtCompCode, [out,retval]int *pnCompletionCode);
So 2 'ByRef' parameters in VB.NET lingo, and a return value. I attempt to invoke this method like so: Dim parameters(2) As Object parameters(0) = "data" parameters(1) = New Object() parameters(2) = New Object() Dim p As New ParameterModifier(3) [Code] ..... This fails spectactularly with an exception: {"Invalid callee. (Exception from HRESULT: 0x80020010 (DISP_E_BADCALLEE))"}
I assume this means I'm doing something wrong in my parameterMods array. Because if I comment out setting any value of the ParameterMods array to 'True' - it works. It of course doesnt update the parameters that are [out] parameters and so it's not working as intended. Is there something else to consider since the method also has a return value? The MSDN example pretty much does exactly what I am doing, with the exception that example did not have a return value.
I Have a Function on my frmMain Class wich will update my control to something else after an invoke. When i type "?Label1.Text" on the Immediate Window, the text property IS updated, but when i go check the Form, nothing happened. The code is just like this
I have a ASP.NET (C#) web page which utilizes a VB class library. The VB library performs a SOAP POST to a remote web service and returns a message. However the VB library keeps running into a "No connection could be made because the target machine actively refused it xxx.xxx.xxx.xxx" However, I've also created a C# test client which consumes the same VB class library and can perform the post just fine! [code]
i'm Using net 4.0 & i'm learning parallel programming ,i'm using parallel.invoke to run 2 or more methods with together at a same time but i want to update my UI ( listboxes ) while i'm running methods . i can do that with threads & delegates , but now i can't do that , this code is running well
[code]...
i dont know why me.invoke or listbox1.invoke wont work with parallel.invoke !
In design mode, I have 2 forms, Main and Profile. Both have many controls on them.When executed, the Profile form is duplicated 4 times and named Profile1 through 4. Among the controls on these forms are 3 buttons that copy the selections from the other 3 forms to the one that had the button pressed.How do I accomplish this? I don't understand how to let the method know which form is getting it's buttons pushed so it knows what form to copy...
The problem is that, when I call the "SetStatusBarText" sub from another thread, InvokeRequired is True (as it should be), but then my threads stall on the Me.Invoke statement - pausing execution shows them all just sitting there, not actually invoking anything.
I have a simple login field, which works fine with the exception of one quirk. The form is set up with the tab order to go to the UserID first and the Password text box second. This works fine when the form is used the first time, but when the form is used the second time the focus in placed in the Password field. If the form is used a third time, focus is moved the OK button, that is each time moves to the next tab order. I even tried to set the focus in the Load event as in Me.txtUserID.Focus(), but this doesn't change the behavior. Again, I should note that I close the form and not hide the form.
i want to which way is better when concentration is on processing speed. i want to call a method that compute some data that method is on another form in my windows form application then what you prefer is better way 1) to call that method in another form and use returned value or create similar method in form where it is required.i want to make it's processing fast.
just wondering if it is possible to add a method to all forms in my project without having to do it on one form and Inherit all my other forms from that one
I have a filesystewatcher object. On it`s event it runs a procedure which fills a treeview with a data. I had problems with treeview methods, but when I run them using invoke method everything is ok. But I still have one problem. When I load the form for the first time, everything works fine. But, when I then close the form (me.dispose, me.close), and load it once again, when Filesystemwathcer start the procedure i have an exception "invoke or begininvoke cannot be called on a control until the window handle has been created" trying to run a treeview.invoke method?