Call Same BackgroundWorker Multiple Times Without Using Application.DoEvents
Mar 4, 2010
I'm running in to a problem that I was able to fix with Application.DoEvents, but don't want to leave that in because it might introduce all sorts of nasty problems. Background: Our app is primarily a desktop app that makes many calls to a web service. We control everything but changes to the overall system design are not going to be seriously considered. One of those calls, Calculate, is used very often, and occasionally can take a few minutes to process all the data to return valid results.
I have a windows forms application written in VB.NET which scrapes information from serveral web pages (who doesn't right)? Anyway, I am having problem with one particular site where partway through the page navigation my application hangs. When I press pause (or break) in the debugger, it stops on a call to System.Windows.Forms.Application.DoEvents.
Resuming execution shows that it really is stuck on this line (it does not reach the next line of code). It also hangs about the same point each time I run it (at least its consistent). Since System.Windows.Forms.Application.DoEvents yields to other threads on the same processor and then resumes execution of the current thread, I think the problem is that some other thread is not behaving well (not returning from some event handling code). I thought Windows 7 was pre-emptive, which makes me doubt that theory but I really don't know.
[Code]...
The program scrapes somewhere between 12 and 14 pages before it gets stuck on the call to DoEvents. Does anyone have a clue why this would happen? Why would any call to DoEvents hang?
I am re-posing this question because the prior post has gotten really full of side issues so I fear the main problems has been lost.I have a windows forms application written in VB.NET which scrapes information from serveral web pages? I am having problem with one particular site where partway through the page navigation my application hangs. When I press pause (or break) in the debugger, it stops on a call to System.Windows.Forms.Application.DoEvents.
I am doing a project for my company. In that i have to enter the number of items in the first form and in the second form i am going to enter the details of each items. So i have to repeat the second form to get the details number of times depending on the value i have given for number of items in the first form.From the home page i will be entering the values for the master file. after entering the values for the master file then i have to enter the details of the individual item details in a transaction file.
I used BackgroundWorker to solve a problem in my winforms application, I wanted to be able to cancel a long-running operation and see results live in ListBox while executing the operation. It works fine except when I want to add a checkbox with additional condition. The problem is when I want to run several operation at once. Ex. both XX and YY executing XX first and then start with YY in that order.
Private Sub UpdateDB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTestAll.Click If cbxTestYY.Checked OrElse cbxTesteXX.Checked Then SetBusyState(True) If cbxTestXX.Checked Then [Code] .....
I know I am trying to run multiple tasks on same backgroundworker which is not allowed, but I don't have any idea how to solve this so it runs in specific order.
i made an application for serial communication. for this application i need to set delay time. during this delay time i m doing some other task. So for those task i need to take back control from delay function, for this purpose i am unsing Doevents() function.Its work fine On other OS (XP, Windows7 32/64-bit). But Application.DoEvents() function halt and crash in windows vista.
Private Sub TimeDelay(ByVal DT As Integer) Dim StartTick As Integer StartTick = Environment.TickCount()
I am not very familiar with VB.NET so I don't know if this is possible.Some code I am working on is setting the properties of a very large class. In the setter of each property an event is raised to indicate that the class data has changed. An event handler then serializes the instance of the class to a database.Obviously I do not want this to happen after each property is set, so I need to either have a delay before saving, or something else.I am keeping a large list of instances in a cache implementation already, so one option would be to only process the cache every now and then and save all unsaved instances in cache to the database.So I tried to see if I could derive a class from Application (and override DoEvents), but it is NotInheritable, so no luck there.
My mdi VB.Net application performs a long operation on some data. Ideally I should use a separate thread to prevent the dreaded "Not Responding" message.My problem is if I use a separate thread users then have the ability to click on other controls in the application which can directly affect the operation my background thread is working on, creating an error.
Is there any way to prevent all the mdi windows, toolbars and other controls from receiving mouse clicks and keyboard input during my background thread's operation?
Or is there a way to clear the message que before performing a Application.DoEvents?
I have a unique situation in that I've developed a VB.NET application for AutoCAD. The way this works, you build your project into a dll and utilize AutoCAD API references when designing the project. From AutoCAD, a "Netload" command will load your dll into it's namespace to run. AutoCAD then essentially takes ownership of your application from here on out. The application is ran using a command defined in a method's attribute:
<CommandMethod("CommandNameForApp")>Public Sub MyCommand() 'Code Here End Sub
Due to the heavy load of processing loops as it evaluates AutoCAD drawing data, processes this data, and generates many, many Excel reports, I've added a boolean property called Cancelled to my Progress class. When the user cancel's the process, this is seen by the process and further evaluation is ended and everything is cleaned up nicely. In order for this to work though, I have to implement Application.DoEvents. Without it, the Cancel feature will not work at all. With it, now instead of allowing the application to stay loaded, the Command method is fully closed.I have added a go-to point and simply verify that the application isn't closing because of a user-cancellation event. Here's what it looks like now:
<CommandMethod("WireShop")> Public Sub WireShopApplication() 'Initialize Configuration File Data 'Initializes ValidBlocks, MarginDistance, WindowDistance, and HelpFileName Properties If ConfigurationFileInitialization() = False Then Exit Sub
[code].....
In my opinion, this seems a little hokey. However, I'm not that familiar with exactly what Application.DoEvents is doing in the background to understand how to "head it off at the pass".
I'm trying to automate the process of logging into twitterfeed.com, and filling in the information (the feed url and twitter username are pulled from textboxes). I had it mostly working the other day, even if it is a bit sloppy (the only way I could get one button to click is to send 50-some tabs). However, lately it seems to enter in a sort of loop. When I pause the program, Visual Studio indicates that it is the Application.DoEvents in the Private Sub "wait" that is still running even after it should be.
Public Class Form1 Private feed, username, temp As String ' Code stolen off of a website as an alternative to sleeping, or trying to do a timer + while combo like I had been doing
We just spent 300 man-hours fixing a buggy application in the field. It all came down to calling Application.DoEvents (re-entrancy problem).This was not caught in design reviews, code reviews.The code was inserted two years ago with the first version; the application was always "flaky" but recent changes exposed the re-entrancy problems to a greater degree. This incident is the second time in our organization that Application.DoEvents caused failures and multi-man hours of debugging.It was discovered in this case by simply noticing the call,buried way down in a complex event handler for an asynchronous task.What do you suggest to prevent this issue from happening again:
Add checkin gates to source control?
Developer training?
Code Analysis rules (why is this not already a built-in rule?)
Can a BackgroundWorker call additional subs? In my program I am connectiong to an OPC Server. I am doing some AsynReads, which in themselves don't take anytime. But Once I get the AsyncReadComplete returned, I want to do the AsyncRead right away. Basically I need to Loop them. The problem now is that while it is doing this, Everything is unresponsive, because it is just going through the loop. So to perhaps rephrase the question, If the BackgroundWorker initiates a process (in this case AsyncRed) would the returned AsyncReadComplete be apart of the BackgroundWorker or seperate Thread?
Imagine that I have a System.Windows.Forms.Timer with 1000 ms interval. If I call Timer.Start() method and after 500 ms I call again Timer.Start() what happens? The second Start call will reset the interval or not? Are there any side effects?
I am writing a project in Visual Basic where I need to run several instances of the same method in parallel. I can do this using BackgrooundWorker by having several (4) copies of my code module (modules 1, 2, 3 and 4) with a call to background worker in each. I then have a Main form which invoke the 4 modules which setup 4 simultaneous background threads. Seeing as the code is the same I want to simply invoke the same module 4 times.
However when I do this I get an error from Backgroounworker that it is already busy. As I understand it this means that it is being shared. However, I have specifically instantiated it as "private" (private with events worker as new backgroundworker). I have tried running the same code in a Class instead of a Module but unless I make it public I have no way of invoking it from Main. I need to be able to pass each thread data from main for it to work on and if the class is private I cant invoke it.
After searching thru BOL and various forums, I've been unable to determine how to use a backgroundworker component with a procedure that contains multiple parameters. If I understand correctly, DoWorkEventArgs is used to pass parameters. However, all the examples I have found use only one. Since DoWorkEventArgs ends in an "s", I imagine it is possible to use more than one parameter.
Iam wanting touse sendinput in a dos or background type app (can be a regular app thats hidden) that emulates mouse clicks and sends mouse moves to another multimouse application. an project that im working on for my school i work at and i need to send the input to it. The overview of the project is i need to have this code be in a service that runs in the background that when a person does a gesture with my kinect code then it clicks the left mouse or sythesis it with sendinput (need mouse up and down sent for this to work). The end programs that receive input are: a program written in the multipoint sdk and mouse mischief. I though about using the default usb mouse driver as an emulated mouse driver to handle the part about creating a usb mouse device that works since most newer computers are using usb.
I read the lines from a textfile into a string array and then I use a foreach loop on the string array. I want to go through the same string array again after the loop reach the end of the string array
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
I have an app that is needs to access multiple web sites and sign up for accounts. I don't want to run them one by one as this would be slow as christmas so I figured that I could setup some sort of background worker and put each process on it's own thread that way the app could run each sign up page at the same time. Would using background worker be the "BEST" option to use for this type of application requirement?
So I took this from an example. GetInstance() is called from hundred different places in my program, and when I debug, the line "Prog = New Program" keeps getting hit for each of those calls. Which I thought was exactly what should NOT happen.. Or do I have some fundamental misunderstanding?
[Code]....
It seems the "New" sub triggers a number of calls to Program.GetInstance, before the first one completes. This is due to me earlier having lots of shared public objects in this class, which are no longer shared since the class was made singleton. And these objects, when initialized, calls the Program class for reference to other of it's objects.
My textbox (txtCopies) default value is 1 so naturally, as it is coded above, the datarow is added once into the Movies Table. But what I need to know is how to code if the txtCopies field has a greater integer value.
I keep on getting errors for every line in the code below that tell me that the attributes cannot be applied multiple times. What does this mean and how can I fix it without changing what the code does?
I'm trying to loop the inputbox 5 times but I'm not sure how. Dim payroll1 As String payroll1 = InputBox("What is the payrolls for store1", "Inc", , , ) Lblstore1.Text = payroll1 I can get it to loop till a specific amount but not 5 times exactly.