C# - Interacting With The UI Thread From An Async Callback Method?

Nov 15, 2009

I have a method that is asynchronously called when System.Net.Sockets.NetworkStream.BeginRead completes.

skDelegate = New AsyncCallback(AddressOf skDataReceived)
skStream.BeginRead(skBuffer, 0, 100000, skDelegate, New Object)

In that callback method, I need to interact with the UI thread.

Sub skDataReceived(ByVal result As IAsyncResult)
CType(My.Application.OpenForms.Item("frmMain"), frmMain).refreshStats(d1, d2)
End Sub

This causes an exception after the method completes. (when End Sub is executed)

[Code]...

View 4 Replies


ADVERTISEMENT

Callback Method - Cross Thread Operation Not Valid Exception?

Jul 28, 2009

I have a windows form that gets data from a scale via the serial port. Since I need the operator to be able to cancel the process I do the get data process on a second thread. The data collection process gets multiple readings from the scale one at a time. The form has a label that needs to be updated with information specific to each reading.

I call the method to get the data from the scale with this code.
Dim ad As New readALine(AddressOf thisScale.readALine)
Dim ac As New AsyncCallback(AddressOf Me.GetDataCallback)
Dim iar As IAsyncResult = ad.BeginInvoke("", ac, ad)

The delegate for the readALine method is defined in the UI code.
Delegate Function readALine(ByVal toSend As String) As String

The GetDataCallback method:
Private Sub GetDataCallback(ByVal ia As IAsyncResult)
.
.
.
lblInstructions.Text = _thisMeasure.dt.Rows(_currRow - 1).Item("cnt") & ":"
lblInstructions.Refresh()
.
.
.
End Sub

I get the exception on the "lblInstructions.Text =" statement. I thought the GetDataCallback method was part of the UI thread so don't understand why I'm getting the exception. I know this could probably be rewritten using a BackgroundWorker and it's appropriate events but for now would like to understand why this isn't working as expected. The application was written originally in VS2003 and just recently upgraded to VS2008.

View 5 Replies

Async Callback From ThreadPool?

Jun 12, 2009

I have a bunch of operations that need to be executed simultaneously. For this I'm using the thread pool to execute the tasks. I'd like to know if it's possible to consume some sort of Async Callback (similar to BackgroundWorker.DoWorkComplete) when each thread is finished. The reasoning behind this is that I have a windows service running that uses IPC to update a GUI and I need to know the time at which each specific thread finishes I've used background workers to do a set of tasks and they work perfectly, however, they take longer than I would like. I've timed the execution on my BGW method for a designated number of said tasks and it took 27 seconds, and the same set of tasks takes 4 seconds using the threadpool method. I've also tried using managed threads, to the same effect as the background workers.

View 5 Replies

Asp.net - WebRequest Async CallBack Code Only Gets Call The First Time?

May 28, 2012

I am an absolute beginner on ASP.net (VB.) Please pardon me if the question is too obvious for the experienced members.I tried to make a simple WebRequest in the async mode in case the target URL takes long to provide the data. In my code below, I just want to see if the callback block (RespCallback) is called correctly every time. If all goes well, lblResult should have the string '123' appended to it every time I click the button which calls the 'GetData' sub.

However, the lblResult only shows 123 after the first click. After the subsequent click, the lblResult only gets appended with '12', as if RespCallback is never called. When I tried to debug this in Visual Studio, the execution actually stepped right into the RespCallback part and the lblResult.Text watch actually shows '123123' but the resulting Web page always shows only '12312'

I am sure I am missing something basic here, but I just don't know what. I was even guessing that it has to do with browser cache (hence the result changes for the second time) but I don't know how to fix that either.

[Code]...

View 2 Replies

Multitasking Interacting With UI Thread?

Oct 1, 2011

I'm trying to start to use the Task class for multi-threading. This is a really simple example so I can work out the ins and outs. As an example, I have the below thread, the thread.sleep is used to represent large amounts of data processing, at the end of which I'd like to update something on the screen. Please advise a good way to achieve the idea of the below code with respect to the text box update.

With the old threading system, I would grab the UI context, and do a .post/.send to it. I'd like to have that ability with the newer task system, but am open to the preferred way of solving this.

As a back ground, the threads I will be replacing were previously constantly running during the app with a do/while that was killed at app close.

[Code]...

View 6 Replies

VS 2008 Specifying A Callback For Another Thread

Dec 14, 2009

I've used the async classes in the .NET framework several times but I've never tried to do something like that myself - I mean I've used background threads and made them invoke other methods on the UI thread loads of times but they have always been hard coded method names, not something where you can specify what method is invoked when the background thread is finished.

I'm writing the data access layer for my current project and I want to have all of the methods be asynchronous, so these methods in the DAL need to be able to 'call back' any method that is specified, rather than a specific method in the same project as I would normally do. This is how I have done it, and it seems to work, but I'm not sure that this is the best way or even close... Here is the signature of public method in my DAL that my programs call:

[Code]...

View 4 Replies

Blocking A Thread To Wait For Callback

Jan 19, 2009

I have been reading the async design patterns on MSDN and the general idea makes sense to me but in practice it is proving to be more difficult. I am working on a project utilizing VMWARE VIX.

HTML Code: [url]. Each function such as connecting to a host server, retrieving properties, etc. can be executed in two different ways.

Connecting to a host using a blocking Wait:

Code:
Dim m_lib As New VixLib
Dim m_hostJob As VixCOM.IJob

[CODE]...

Code:
Dim m_lib As New VixLib
Dim m_hostJob As VixCOM.IJob
dim m_callback as VixCOM.ICallback

[CODE]...

The problem with the VIX SDK is that sometimes the functions never return, hanging the application. dblock.

HTML Code:[URL] came up with a library that specifies a timeout value. When the timeout runs out the method aborts and returns regardless whether it finished or not.

The callback method is an active wait where the code continues to execute. What I want to implement is a blocking wait with a timeout. The ICallback interface has one sub OnVixEvent(IJob,Integer,IVixHandle). This method is fired at least twice, first when some progress is posted and second when it is complete. The first call to this method can be one second after registering the callback or 30 seconds, so I can not rely on this method to block the main thread. how to create some kind of async result class that would block the main thread from executing until either a timer runs out or the OnVixEvent method returns an Operation Complete signal that also implements ICallback.

View 10 Replies

Form Callback - Create A Module That Will Start A Thread

Mar 2, 2012

i am trying to create a module that will start a thread to go do something. once the "something" is done i want to notify the calling form that the event is complete. i left out the thread stuff since its not relevant to the question. the following code would work fine in VB6, but .net sees it as an error because FRM does not have a FRM.done, "DoSomething" would could called by multiple forms [Code]

View 2 Replies

Wpf - DependencyProperty Callback-Method Not Called

Nov 29, 2009

I create a UserControl (TableWithFilter.xaml) with a dependency property (source). The UserControl is a Table with a source property for the different items. I created the XAML and set the source property via the XAML Binding. So far so good.

But if the value of the dependency property is changed, the defined callback method is not called. Therefore I cannot update the entries in my table. Has anyone an idea why the callback method is not called?

Here is the definition of my property in the class "TableWithFilter":

Public Shared ReadOnly SourceProperty As DependencyProperty = _
DependencyProperty.Register("Source", GetType(List(Of TableViewItem)), GetType(TableWithFilter), _

[Code]....

If the attribute "ContentList" is changed I expet that the "ChangeSource" method in the TableWithFilder class is called. But this is not the case. After I changed the ContentList attribute, I Raise the following Event:

RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("ContentList"))

View 1 Replies

Stuck Trying To Create An Async Method

Oct 8, 2010

For the last week I've been trying to create an async method. I tried the MSDN article How to: Implement a Component That Supports the Event-based Asynchronous Pattern but it does the work in a method in the same class. The work I'm doing is a lot more complicated and is its own class. The problem I'm having is the class doing the work cannot post the progress or completion as the methods that handle this stuff is in the parent class.

View 2 Replies

What Happens If The Callback Method Takes More Than The Specified Timer's Time Period

Mar 1, 2011

I have the below code. What happens if the Upload method takes more than one minute for completion? Does the timer kick off another call to the Upload method immediately after one minute is over or Does it wait until the method finishes executing? I am implementing this as a windows service.

Protected Overrides Sub OnStart(ByVal args() As String)
Dim tmr As Timer = New Timer(New TimerCallback(AddressOf Upload), Nothing, 1000, 60000)
While Not tmr Is Nothing

[code]....

View 1 Replies

Call A Method That Started On A Background Thread On The UI Thread Calling BeginInvoke And Passing In A Delegate?

Aug 27, 2011

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))

View 1 Replies

Run A Method On The Main Thread From A Separate Thread?

Dec 31, 2010

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?

View 1 Replies

Making An Async Function Not Async?

Jun 3, 2010

I'm trying to write a 'developer friendly' wrapper for the Windows API EnumWindows - the problem is that the API uses a callback function that gets invoked on another thread, where as I want my wrapper function to simplify this and make it more useful by working like any other normal synchronous function and just returning a value.

Now if the API just called the callback once that would be fine, as I would just call the API and make the wrapper function wait until it got a signal from the callback function telling it to continue... but the API calls the callback function over 100 times (once for every window handle that exists). The biggest problem is that there is nothing that indicates that any particular call to this callback function is the last one, so my wrapper function has no idea when it is safe to continue and return the list of window handles to the caller.

The only solution I could think of is to do this:

1. The wrapper function calls the API and starts a timer that waits 2 seconds before it raises the Elapsed event. The wrapper function then pauses until it receives a signal (ManualResetEvent)

2. Each time the callback function is raised by the API on a different thread, it stops the timer (so this is before the 2 seconds have elapsed), adds the current window handle that was passed in by the API to the list of handles, then starts the timer again.

3. If the timer reaches its 2 second interval then it is assumed that we are at the end of the windows because otherwise the callback would have stopped the timer. So the timer's Elapsed event handler is what signals the original thread (that the wrapper function is executing on) to continue as we now have a complete list of windows to return.

This works fine and does exactly what I want... but I dont like it.

I dont like forcing the caller to wait an extra 2 seconds after the API has done its last callback but more importantly I dont like assuming that the API will never take longer than 2 seconds between callbacks. In reality on my PC it is never anywhere near that long between callbacks, it is something like 200 miliseconds, but I have no idea how long it would be on a slower PC and I want this to be completely reliable.

[URL]

View 14 Replies

C# - Reassign Thread To A Different Method .net?

Feb 16, 2010

Is it possible to reassign thread to a different method, once it has been instantiated. If not, are there alternatives?

View 2 Replies

Call A Method In A Thread?

Dec 29, 2009

I have a class that runs as a thread. While the thread is running, I want to call a method in that thread. I do this commonly where a thread calls a method in the GUI with a delegate. But I'm confused how to do this when the called thread is not the GUI and there are no parameters passed to the called method.

View 8 Replies

VS 2010 Run Method On Non-UI Thread?

Dec 11, 2011

Usually I use the synchronizationcontext to run methods on my GUI thread from a background thread. But now I need to do it the other way around and the synchronizationcontext class doesn't work on threads that don't have a GUI. What I basically need to do is, if there is anything going on on the thread I want to run my method on, I want to pause or interrupt it and run my method and then let it continue.

View 4 Replies

.net - Is The Enqueue Method Thread Safe

Nov 2, 2009

Let's say that I have a module that has a Queue in it. For other entities to Enqueue, they must go through a function:

[Code]....

If I have multiple threads running and they want to call InsertIntoQueue(), is this considered thread safe? I am under the impression that there is only one copy of the instructions in memory necessary to perform the InsertIntoQueue() function... which would lead me to think that this is thread safe. However, I wonder what happens when two threads attempt to run the function at the same time? Is this thread safe, and if not, how can I make it thread safe? (and What would be the performance implications regarding speed and memory usage)

View 6 Replies

Call A Method Which Has Two Parameters Using Thread?

Jun 8, 2009

I am trying to call a method which has two parameters using thread. How can I do this? If I pass parameter to my thread.start() method, it is giving error.

View 1 Replies

Create A Thread And Associate It To The Run Method?

Feb 8, 2010

I'm trying to change/execute the example [URL]...onContext.aspx I've posted my project below. I'm getting a cross-threading error and I thought the point of all of this was to avoid that. (yes I realize I could just delegate... I'm trying to do something more complicated but am using this as a test bed)

[Code]...

View 17 Replies

Cross-Thread Method Access?

Jan 29, 2009

I've got a problem. I'm running a different thread. The thread's sub is looping, doing various things during the program, and eventually tries to close the form. I get an error, because the other thread can't access the "Me" object, I guess. It won't close the form. I don't want to use Application.Exit. Is there another way?

View 3 Replies

.net Thread Safe Method To Add A Listview Subitem?

Feb 21, 2011

I am trying to add a subitem to a listview in a threadsafe manner.In a single threaded application it works like so:

[Code]...

However if run in another thread it causes a cross threading error.I have looked at examples of delegate subs that use Invoke, but all examples i have seen involve updating the text property of an object, and i cant get my head round how to apply the concept to actually add a subitem to a listview.

View 3 Replies

Canceling A ThreadPool Thread That's Being Blocked By A .NET Method?

Aug 14, 2009

I have a task that needs to be executed many times in a thread, so as to keep my GUI responsive. Right now I'm using the ThreadPool to accomplish the tasks, and it works perfectly. I get all the data I expect back from the threads, life's good. When those tasks are finished, I then fire off another set of threads to accomplish another set of tasks, in the same fashion. The work method of these threads uses a call to RegistryKey.OpenRemoteBaseKey, which does exactly that, opens a remote registry key. The problem is: if the user running the application does not have permission to open the remote registry the call will throw an IOException, but I expect this behaviour because the user does not have permission to do it. However, the call itself can take FOREVER.

I wrote the application initially to use delegate methods and used the WaitHandle.WaitOne() method on AutoResetEvents in a state object I passed to each delegate. I tried the WaitOne method using a timeout, which worked fine until I realized that even though the WaitOne timed out, the thread was still running. This is a problem because (from what I understand) processes are only given a certain number of ThreadPool threads and, once used, they must be finished in order to be released back to the threadpool. In my work method, I also have a variable that can be signalled when the thread should be stopped, but that (obviously) only works on code that I've written.how can I cancel a thread that's stuck on a .NET method? Is there some sort of garbage collection method I can call if I give it a handle?

View 18 Replies

VS 2008 Passing A Class Method In A New Thread

May 14, 2010

I am looking for a way to pass a class method into a new thread. On my form I have a few object that contain methods.

For example obj1.doWork.

Now I want to do

Example
Dim t as new Thread
t = new Thread(AddressOf obj1.doWork)
t.start()

However I get an error on this saying:

Error1Overload resolution failed because no accessible 'New' is most specific for these arguments:
'Public Sub New(start As System.Threading.ParameterizedThreadStart)': Not most specific.
'Public Sub New(start As System.Threading.ThreadStart)': Not most specific.

View 11 Replies

Put Method In Main Thread From Background Without Declaring Delegates?

Nov 23, 2009

put method in main thread from background without declaring delegates

View 2 Replies

Thread Safe Method Invoke Doesnt Work?

Jan 2, 2010

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

[Code]...

View 3 Replies

VS 2010 Multithreading, Putting Class Method On New Thread?

Jun 4, 2011

Right now I have a Email class that has all the properties of an email to send it, and then a SendEmail function which takes those properties and uses them in the following

Public Function SendEmail()
'Exception handling
Try

[Code]....

The loop goes through each email in the array to process its email, however with the multithreaded function I cannot call

"EmailArray(i).ThreadSendBatchEmail()"

So how do I call an objects method when its on a different thread?

And I'm making it multithreaded so I can easily pause the process, and because the program freezes when the send() function is working, this would resolve that.

View 17 Replies

Multithreading - .net Avoiding Cross Thread Exception With Extension Method?

Jan 13, 2011

I am trying to implement a solution for updating form controls without using a delegate.

Imports System.ComponentModel
Imports System.Runtime.CompilerServices
Public Module MyInvoke

[code]....

I get a cross threading error as though i didnt even use this method:Cross-thread operation not valid: Control 'ComboBox1' accessed from a thread other than the thread it was created on.

View 3 Replies

.net - Yield/Sleep/throttle Another Thread While It Is Executing A Method In An External Library - Specifically Jurassic?

Jun 25, 2012

I am using a .Net JavaScript implementation called Jurassic to run user-controlled scripts within my .Net 4 WPF application coded in VB.Net - C# answers are fine. The script engine runs on its own thread and provides an API for the script to interact with my application. This all works really nicely until a user executes a script that causes an infinite loop and takes out a core of the processor.

[Code]...

The reason I care about keeping the thread alive is because the user who wrote the script and the user who is running it may not be the same, and I want to keep the experience as smooth as possible the the user running the thread. There also might be legitimate situations in which a single JavaScript function would run for a long time and I do not want to kill that, I just want to stop being allowed to hog the resources.

Solutions that involve stopping the thread from slowing down the system but that still show high CPU usage are not preferable because I do not want the user to wrongly feel that the application is resource intensive.

View 1 Replies

VS 2010 Error - Cross-Thread Operation Not Valid: Control TbPlaca1 Accessed From A Thread Other Than The Thread It Was Created On

Aug 13, 2010

In one application, I need use 4 simultaneous threads.When the threads finished, I need to update the text of a TextBox.So, I create 4 Textbox, and I wanna the threads change the text to FINISHED.Each thread change one distinct TB.I use this "example"

Dim Terminados As Integer = 0
Private Sub frmEnviarMensagem_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Enabled = True
Timer1.Start()

[code]....

The problem is, I have an error in the red lines.The error is: INVALIDOPERATIONEXCEPTION "Cross-Thread operation not valid: Control tbPlaca1 Accessed from a thread other than the thread it was created on."I don't use cross threading. Each TB only was accessed for the correspondent thread, and for the "main program".

View 3 Replies







Copyrights 2005-15 www.BigResource.com, All rights reserved