Put Method In Main Thread From Background Without Declaring Delegates?
Nov 23, 2009put method in main thread from background without declaring delegates
View 2 Repliesput method in main thread from background without declaring delegates
View 2 RepliesHow do I dynamically call a function with delegates by passing a string to a background thread in VB.NET?
Currently my code is this
Public Sub invertImageBK(ByVal image As Bitmap)
Dim snxl As System.ComponentModel.BackgroundWorker = createBW()
snxl.RunWorkerAsync(New ImageProperties(image.Clone, "invertImage", Nothing))
[Code].....
I am trying to call a method that started on a background thread on the UI thread calling BeginInvoke and passing in a delegate as follows:
Dispatcher.BeginInvoke(Function() UpdateApplicationDataUI())
to call this method:
Private Sub UpdateApplicationDataUI()
...
End Sub
However, I get an error in the call to BeginInvoke (the UpdateApplicationDataUI portion of the delegate is stating "Expression does not produce a value").
Me.Dispatcher.BeginInvoke(Function() New Action(AddressOf UpdateApplicationDataUI))
I'm reading data from a serial port, but the DataReceived event of SerialPort is handled on it's own thread. I want to handle this on the main thread, but simply declaring an event and raising it still results in it being processed on the SerialPort thread. I'm assuming I need to declare a delegate I can call, but I don't see how that would work.
For example, I want to call Sub HandleDataReceived() on the main thread from the DataReceived thread, having HandleDataReceived() run on the main thread. How would I do this?
I use background worker almost daily and works great. Today I came to an instance though where I needed to put my background worker in a separate project then the one I was running because I needed to use this class in two different projects in my solution. When I tested the coding on a winforms form, it works perfectly, handling my coding on the background thread. When I try to reference this class from an external project, all of my coding seems to run just fine, but it does not appear to be doing anything on a background thread as it should be, causing my main window to lockup.
Is there any way around this / what is the best practice for ASYNC calls in an external class.Note I basically created a class that u call start, and an event fires when data is ready, so it's not like my external project is waiting for the method to complete.
Solution ABC has two projects. Project A and Project B. Project A is my WPF application and B is my DLL doing the work. Inside project A I have
Dim SmartCardData as new Solution.B()
SmartCardData.Start()
Project B has a sub
[code]....
I recently finish my Microsoft VB.net training and learning something about delegates. I have two delegates in a excel source to control a progressbar and a text box on the mainform
Public Delegate Sub ReportProgres(ByVal percent As Integer)
Public Delegate Sub ReportText(ByVal Mytxt As String)
I want to use these delegates in a second excel source also. It gives declared in the first excel file and two conflict errors in namespace windows application.
I have a form with a DataGridView control. When i load the form, i fill the control with several records. Now sometimes it can be 1 to 30, but sometimes it could be 10000+ records.Now, what i'm trying to do is to grid.AutoResizeColumns
As you can imagine, when i have 30 records it goes like the Flash, but the more records, the longer it takes; obviously..So, for now i have a ugly label saying "WAIT PLEASE" and waitcursor=true; Yes, horrible, i know...
So i tried to do the following:I created a form called frmWAIT, and have a timer in it that shows 4 pictures at 250ms intervals, to make some kind of animation.In my Primary form, i added a BackgroundWorker, and in the DoWork Event, i tried to grid.AutoResizeColumns and it won't do it.
[Code]...
I'm creating a Client Server application which involves theServer running some scripts in clients and getting back results in an automated way. In Server, other than Main thread, i have 2 worker threads, a) one monitoring response from clients and b) the other scheduling next available job to respective client which executes that job. The issue here is ,I want these worker threads to write the status of their work in the UI(which comes under Main Thread). Also i need to write things in worker thread in a Data table and Rich Text Box in Main thread. But, I can't do so, since it has been blocked to access one thread's function or property directly from others. Is there any work around to do this?
View 8 RepliesPreface: I know this is an unusual/improper way to do this. I can do this with a "real" ShowDialog(), background worker/thread, and so on. I am trying to do specifically what I describe here, even if it is ugly. If this is impossible for X reason, I have created a fancy progress dialog for some of our long running operations. I need to have this dialog shown on a new thread while having processing continue on the calling (UI in most cases) thread.
[Code]...
I have a thread in an application which calls a sub routine Main(). The Main sub routine in turn call several sub routines/functions from with the same module,several different classes in the same application. Also some sub routines/functions call routines from a class library. Now say the routine/function in class library goes into a infinite loop and never returns. I would like my thread in the application to raise a event and display message to the users about the infinite loop. I am giving some sample code for the application.
Imports System.Threading
Module VMain
Public gbSuspend As Boolean
[CODE]...
I'm working with BackgroundWorker, I want the BackgroundWorker do the retrieval process of data from database while the user can still do another task on the form. The problem is, after retrieving the data, I can't seem to access the ListView in my Form from the DoWork event of BackgroundWorker, I will populate that ListView using the data I've retrieved.
Consider this example, this is how I'm doing it:
Public Class Test
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
[Code].....
could someone tell me how to fire an event in main thread from another thread as well as fire and forget without use a new thread?
View 9 RepliesA non-UI thread in my prog needs to obtain data from a UI listview control. To prevent cross-thread errors I use the following, but it freezes the prog (probably because the "Else" part is never called).What am I doing wrong?
[Code]...
Imports System.Reflection
Public Class Test
Private Field As String
End Class
Module Module1
Sub Main()
Dim field = GetType(Test).GetField("Field", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance)
[Code]...
I can't figure this out. I have a bitmap that will be used throughout an application, so I can't declare it with a Dim statement in a procedure, or it isn't recognized as having been declared in other procedures. So I declared it at the top of the form class, two ways. This one works: Private MyBitmap As New Bitmap(622, 461) It makes a bitmap to the exact size of a picturebox I have. But I want to be able to change the size of the picturebox and not have to worry about going back into this declaration to set things up, every time I decide to change the box's dimensions. So I tried this next version, but it doesn't work:
[Code]....
I have an application that displays real time data. Queries are made to a MySQL database on another PC over the internet every 10 seconds to gather the most recent data.Originally I did the query within a BackgroundWorker so that the GUI is still responsive while the query is answered. However, I found that I need a timeout on the database query (as sometimes it hangs without generating an error) and couldn't do this within the background worker.
So now I'm trying to do it with threads. I have managed to run a thread to get the data.I need to understand how to run a task on the main thread when the GetDataThread is complete. If I do this using Events as shown below then Sub GetDataComplete is running as part of the GetDataThread not the Main Thread. I want to run a sub like backgroundWorker1_RunWorkerCompleted (this seems to run on the main thread).
My Main thread is called MainThread
VB
Imports System.Threading
Imports System.ComponentModel
[code]....
How can I run a task on the main thread when the GetDataThread is complete.
I am using a COM library in my VB.NET app that has an asynchronous execution method and signals my application via an event when it completes. The event handler is on a different thread from the calling thread. I want to invoke another execution on the main thread when I receive the completion event. If I call directly in the event handler for another execution it starts on the new thread. How do I marshal back to the main thread. This is done in a dll not in a form.
View 3 Repliesi have a background thread when it is done doing its task it notifies the main thread via a delegate sub it seems if the main thread is "busy" then the background thread hangs waiting for the main thread. if this is normal, which i assume it is my background thread, starts another thread, and this 2nd background thread makes the delegate call is this bad practice?
View 2 RepliesI have written a program that performs multiple httpwebrequests. It reports in to me by writing to the console. In the past, i have used a backgroundworker for this task, but the code became ugly and bulky. Now, i use threading.thread to start the background process. However, i can't seem to find an explanation on updating the UI from the worker thread.
I've read a lot on delegates, invoke and lambda's, and i just got more confused.
Let's say, in my current program i have this line to be displayed in a textbox on my main form:
"Error reading events!"
is the first time I tried to use a timer - can't understand why it doesn't work!I need to suspend the main thread for a preset time 'delaymSecs' then let the thread continue.I tried this code fragment:-
System.Timers
'(etc)
Public
[code].....
Well basically I have something being done in a new thread and I would like to start a sub not in the same thread, but in the main thread. How do I do that?
View 3 Replieshow i can refresh my main form background image once a user picks a different image as the background.I have 2 forms namely Form1 (main form) and form2 from where the user can select the image he or she would like to set as the background image of form1.But the problem is that after selecting the image file from form2,when form1 is opened the background image doesnt change and remains the same as before.Only when the user ends the program and re-runs it again the image changes.
I tried
Form1.reload()
how to access the main ui's labels from a delegate method?
View 7 RepliesI have created a project that shows a splash screen first and then shows the main form once the main form has been fully loaded. I only want to show my splash screen once the main form has completely loaded in the background. My main form by itself takes like 3 seconds to load, so I would like to display the splash screen for about 3 seconds and then show the main form because the main form will then be fully loaded, but instead it shows the splash screen for 3 seconds and then the main form still has to load anyway.How can I load the main form in the background and then show it when it is fully loaded?
View 8 RepliesIt's easy to do so in objective c but I do not know how to do so in vb.net update:I know about control.invoke. But control.invoke requires a control that may change from program to program. What would be the easier way?So yes program is winform. However I need a solution that does not depend on any specific control. If that's the case actually I do not need things to be run on main thread do I?
View 2 RepliesI have a user app written in VB which up till now has relied on winsock to connect to another device we have. The user app logs onto the device and then send / receives status reports from it which are used to set the controls on the apps forms.
This has all worked well for a long time but I'm now looking to move away from Winsock as I know it's not 'the right way' to do things and I also need to be able to send non ascii characters between the app and the device it's connected to (implementing multi language support).
The issue is with Winsock it would simply throw the DataArrival event when a message was received and I could then process the message and act upon it. When using a TcpClient socket connection I'm running into problems as all responses are on the socket thread which means I can't simply change controls on the main form without using the Invoke check.
What I want to be able to do is have the thread running the TcpClient simply alert the main form thread when it receives data and make that data available to the main thread so it can start processing it and triggering all the other functions etc required (these also interact with the Form). Whilst this is happening the TcpClient monitors any further messages and sends response messages as requested from the main thread.
I have two applications. For performing certain functions, i run a second exe, via a process, and wait till it is complete (exited) to continue with my main application. I run through many repetitive functions on different files.Everything runs fine however, when i am doing a run and it is on the x loop number, the main application seems to halt the secondary process exe. I can only assume this is what is happening as, if i close/stop (not pause) my main application in VB, the second exe continues from where it was halted until it completes.
View 4 RepliesI feel like the answers I seek are rather obvious so I feel silly for having to ask, but I just can't seem to figure this out (I'm new to threads, and am really only comfortable using them in Java at the moment). I have an Excel Addin application created with VB.NET, and I've noticed that occasionally while it's running some code (it's no one specific block of code) the program execution will just stop. This is especially problematic when I've set ScreenUpdating to False for Excel because the users then have to completely close out of Excel to get ScreenUpdating to true.
[Code]...
How do I add a main method in vb.net Windows App?
I tried to add Module.vb file and declared main method there and then when I also to change the startup object Properties-> Application, I dont see option of Main method?
I've taken up learning vb.net having come from a C# background.
I was trying to reprogram a simple C# winforms program I had, which took command line parameters to determine what it did. In C#, there is always a main method to accept these arguments.
From what I've read, vb.net implements a main method for you once you specify the starting form, unless you make one yourself. Which is fine, but the one I've implemented seems to get ignored, I've put break points in to see if the code even get looked at, but nothing. The main sub is in the class declaration of the startup form like so[code]...