VS 2008 BackgroundWorker ReportProgress Doesn't Fire ProgressChanged
Oct 13, 2009[URL]
Occurs when ReportProgress is called.
but in my code ProgressChanged event doesn't fire after this line bgwBckp.ReportProgress(1)
[Code].....
[URL]
Occurs when ReportProgress is called.
but in my code ProgressChanged event doesn't fire after this line bgwBckp.ReportProgress(1)
[Code].....
I have a UserControl that has a ProgressBar on it. The purpose of the UserControl is to be able to show the progress % on the ProgressBar as text. To do this it uses the MyBase.Paint event. To make it work the ProgressBar is made invisible and the UserControl is 'painted' with an image of the ProgressBar and then the text is painted on top. The UserControl has a Value property that is passed through to the ProgressBar.Value property.
I use this UserControl in two places, on a Splash form (not a standard Splash Screen) and also on the main form of the application. It works on the Splash form but not on the main form - by work I mean that changes to the ProgressBar.Value property cause the ProgressBar to show its progress. The cause appears to be that in the Splash form case the MyBase.Paint event is called as a consequence of calling Me.Refresh in the Set procedure of the UserControl.Value property, in the main form case it isn't,
i.e. Me.Refresh isn't causing MyBase.Paint to run.
The main form has two BackgroundWorker components. The first gets called (RunWorkerAsync) from Form_Load after the Splash form has been shown. The BackgroundWorker.ProgressChanged event updates the Value property of the UserControl and it works exactly as intended. The second gets called as a result of a user starting an operation and again the BackgroundWorker.ProgressChanged event updates the Value property of the UserControl but MyBase.Paint doesn't run so the ProgressBar remains resolutely static.
Any ideas why it won't respond to Me.Refresh in one case but does in the other? Happy to make any of the code avaialble but didn't want to fllod the first post with reams of it. Here's what I think are the most relevant code sections. First the UserControl
[Code]...
I am trying to get a progress bar to update on my Form while waiting for a process to complete but could not get my progressbar control to update.
First of, I have tried to fix the problem for a day and a half now looking at various codes and examples in the forums but I'm afraid I probably do not have the necessary VB skills yet to troubleshoot my own code. I believe I will be able to eventually fix this after I am done with my VB book
I've attached the relevant part of my code below and the problem is that I can see my DoWork event firing off and changing the time and percentage that I want to pass on to ReportProgress() and the ProgressChanged handler. However, the ProgressChanged handler is not raised until after my Do Loop is done.
Imports System.ComponentModel
.
.
.
Public Class Form1
Private WithEvents TestWorker As System.ComponentModel.BackgroundWorker
[Code]....
Again, I can see the ProgressChange fire but only after my work (diagnostics) is complete so my progress bar is either 0% or 100%. In Dowork, I can verify that the progtimepercentage variable is indeed changing and ReportProgress is called but ProgressChanged is not being raised until after the job I wanted is done.
I have a Worker.cs in a ZScreenLib DLL that does the following: 1. takes ZScreenGUI.cs (a Windows Form) as an argument 2. creates a Background Worker object and does everything 3. reports progress to the ZScreenGUI form via BackgroundWorker.ReportProgressThe user can create as many instances as possible of Worker.cs class and do the background worker tasks Now I need to create another Windows form called ZScreenCLI.cs and wish to make use of this Worker.cs class because ZScreenCLI and ZScreenGUI are pretty much the same but ZScreenCLI has much less features compared to ZScreenGUI. My question is, how do you manage to report progress to ZScreenCLI? The ReportProgress methods are tied with the controls in ZScreenGUI form. Obviously there is a problem with the concept I am using
View 4 RepliesI have a search function in my program that uses a background worker in order to get the results. The Progress changed event is used to update the listview with the new item.[code]
View 2 RepliesMy BackgroundWorker works perfectly in my main form frmMain. But when I run the ReportProgress method in another module, I get exception "This BackgroundWorker states that it doesn't report progress. Modify WorkerReportsProgress to state that it does report progress." This IS set to report progress; this works fine when run the same way in the main module.Basically, from a module called by my BackgroundWorker, I want to show progress on my main form.How can I fix this? The only idea I have is to move the code from the module into my main form, but this seems a backward step, which would involve extra work. Am hoping there are easier ways!
Calling code in class frmMain:
Friend WithEvents BackgroundWorker As New System.ComponentModel.BackgroundWorker
Private Sub btnTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTest.Click
' Specify that we do NOT want the background operation to allow cancellation
[code]....
Code which generates the exception in separate module Invoices:
Public Function MyTest() As Boolean
frmMain.BackgroundWorker.ReportProgress(0)
End Function
Am using VB.NET in VS 2010, with .NET 3.5.
I have a progressbar on my form that is not getting updated.
When the Send Email button is clicked I do this:
Public Sub SendMail()
If CheckSettings() = False Then Exit Sub
BackUpEbillFile()
LockForm(True)
StatusBars(1, "Sending emails...")
[Code]...
I have a long running process running in a backgroundworker, and want it to report progress to the user, and update a checked listbox as the items are discovered. The reportprogress is called, and the statements executed (placing a break in the reportprogress routine), I can see the control valuse change, but the change is not reflected in the dialog. Here is the reportprogress routine I'm using:
Private Sub BackgroundWorker2_ProgressChanged(ByVal sender As System.Object,
ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker2.ProgressChanged
Me.newlabel.ForeColor = Color.Cyan
[code]....
Public Function DownloadFile(ByVal URL As String) As Boolean If Not URL = "" Then Dim wc As New System.Net.WebClient() Dim Filename As String = Mid(URL, InStrRev(URL, "/") + 1, Len(URL)) wc.DownloadFile(URL, "C:TESTS" + Filename) Return True End If Return False End Function
I am using that function to download a file. It works. But there are two problems:1# While its downloading the file, the app is sort of frozen like its in a infinite loop.2# How do I get the download percentage?
edit: My resolution to freezing using BackgroundWorker (thread) and using ReportProgress to update the GUI is here: [URL]...
I have a problem with SQLDependency I have took an example from msdn and changed it a little to my purpose but somehow it seems the event never fires up. What I did until now is
1. changed the database owner
2. enabled broker
3. also my query is fine i'm including the shema name.
Here's my code
[Code]....
I have added the AutoPostBack = "true" attribute to the drop down list. It doesn't work.
<asp:DropDownList CssClass="dropDownList" ID="ddlBusinessUnit"
AutoPostBack="true" runat="server" Width="250px"
OnSelectedIndexChanged="ddlBusinessUnit_SelectedIndexChanged">
[Code].....
How can I ensure that the event method is called?
I have a GridView which you can click on a row and it should call the SelectedIndexChanged method (which updates another part of the page based on which row was selected). I have done something similar to this before and it worked, but I can't seem to get the SelectedIndexChanged part to be called for some reason.The page is held in a master page which has a form runat="server" tag, and an <asp:ScriptManager> tagI am using e.Row. Attributes.Add("onclick", ClientScript.GetPostBackClientHyperlink(Me.gridMessages, "Select$" & e.Row.RowIndex)) to allow the SelectedIndexChanged to fire by clicking anywhere on the row.To check that the code does work apart from that, I added a CommandField with a SelectButton and that successfully fires, but i would prefer to find a solution without having to use that.[code]
View 1 RepliesI am using VS2008, vb.net, Windows forms project.I have a combo box control on a tab control.The selected value of the combo box is bound to a binding source.The data source of the binding source is a typed dataset.I set the datasource of the binding source when a record is chosen in a data grid control.Since the combo box is bound to the binding source, this should set the selected value of the combo box, and fire the initial SelectedIndexChanged event.Therefore, I remove the SelectedIndexChanged event handler for the combo box before I set the datasource of the binding source, and add the handler again after the datasource is set.
View 2 Repliesthis is my code:
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
For i = 0 To 1000
[code]....
I recently came across the AsyncFileUpload control in the latest (3.0.40412) release of the ASP.Net Ajax Control Toolkit. There appears to be an issue when using it in a hidden control that is later revealed, such as a <div> tag with visible=false.
Example:
Page code -
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="act" %>
[Code].....
I have a breakpoint on the UploadedComplete event but it never fires. However, if you take the AsyncFileUpload control out of the <div>, making it visible at initial page render, the control works as expected.
So, is this a bug within the AsynchUploadControl, or am I not grasping a fundamental concept (which happens regularly)?
I need to write a long-running process with a While/End While loop.
To avoid freezing the UI, I added a BackgroundWorker object on the form.
Next, I needed to update the UI, but found that the thread cannot do this. Instead, the thread must call ReportProgress() to trigger the ProgressChanged() event.
However, I need to pass the text from the exception (ex.Message) to the event, but didn't find an example on how to do this. I need that text message to update the form's title bar.
Here's the code:
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
While (True)
[Code]....
Basically what I'm trying to do is Query AD for AD Computer objects, which are held in a compname variable. Then I go and check to see if I can attach to the WMI (to help filter out AD-joined linux boxes), if I can't, then I mark it as offline and vice versa. I've read and understand that background worker can't update UI stuff, so it needs to be done via the ProgressChanged sub..I want to update a list box on my main form but I can't get the ProgressChanged sub to see my compname variable from the BackgroundWorker_DoWork Function...I'm guessing I need to make the compname a global variable somehow?
View 2 Repliesin my button click event i ececure
If BackgroundWorker4.IsBusy Then
BackgroundWorker1.CancelAsync()
End If[code]....
after proceess completed if press the button again.i got the following error msg
This BackgroundWorker is currently busy and cannot run multiple tasks concurrently.
After i upgraded my project, i get this :'UPGRADE_WARNING: Event Text1.TextChanged may fire when form is initialized.And when i run project, it fires and do bad stuff, what can i do?
View 1 RepliesI have finally figured out how to download a file with background worker and downloader. Now the form does not freeze.. I have only one problem left now... How do I get the progress bar to increment in tandem with the data flow? I have listed my full code below. Towards the bottom where the DoWork() sub resides, I am just a few lines short of this year long goal.
Imports System.IO
Imports System.Net
Imports System.Text
Public Class Form1
[CODE]...
I have a simple program. It has a "Start" and an "Exit" button. When the "START" button is hit, I change the text on the exit button to read "STOP PROCESSING". Then I go into my processing loop. When the "STOP PROCESSING" button is clicked the first time, the program simply ignores it. When I click it the SECOND time, it gets control. I know this because I put a breakpoint in at the start of the subroutine.What could I possibly be doing to quash the firing the first time?
View 3 RepliesI need to fire an event when the mouse enters a panel with the mouse button already down. It seems the standard mouse enter, mouse move, etc events don't fire when the mouse is already down. With test code i'm using, all of the events fire when the mouse button is up, none fire when the mouse button is down.
edit...here is my test code..
vb
Public Class Form1
Private Sub Panel1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown
Debug.Print("MouseDown")
[code]....
Lets say I have 2 panels, lets call them P1 and P2... P2 is inside of P1...If I have a P2.VisibleChanged event handler it doesn't get fired when the panel becomes invisible P1 becomes invisible ... even though the .visible property changes???
View 4 RepliesI would like to fire an event when double clicking on a listview, but more specifiquelly in the blanck area (where NO item exists)I have read from this msdn page :
Quote: The mouse pointer must be over a child object (TreeNode or ListViewItem). how to fire the event another way ?
Both of these properties have a default value of 30 seconds but I am setting them to something much shorter (8) and my application does not seem to recognize the timeout. Even if I allow the default value of 30 seconds to elapse I still am waiting on the timeout. I am trying to use the connecttimeout to notify my client application that the remote sql server is not available before I try and execute a sql transaction.
I am not sure why this is not working though, the sqlexception for timing out has worked for me before and all I did was set a non-default property. The only change here is that this is a MDI type of project, which shouldn't matter.
[Code]...
I want to be able have the class autofire a function when it is first declared. In my example it would be to load from a file all the constant variables for use in the program.
View 4 RepliesI have a program that reads data from a scanner via the serial port.This program works fine on Windows XP.We have a terminal server set up running Windows Server 2008.I run HyperTerminal on our test terminal, it connects and reads the scanner data fine through COM1.I run my app on that same test terminal and get nothing when I scan.My app connects to COM1 without errors and disconnects without errors.BUT, the DataRecieved event is NEVER getting fired.Neither is the ErrorReceived event.I have played with the Handshaking, with the RecievedBytesThreshhold and pretty much every setup setting I found.Set it up exactly like the settings on Hyperterminal.I have even tried starting a timer on a different thread to call ReadByte every second to try to KICK this thing into doing SOMETHING.Nothing has worked.
I have been trying to fix this for an entire day now.Added events to my class trying to see EVERYTHING that is going on. All I know is, it connects to the port and it disconnects from the port correctly but nothing happens in between.No data when I scan.No event fired at all between connecting to and disconnecting from the port.I have also downloaded other's simple serial communications applications.Nothing in .NET works.[code]
I was messing around with the listview Control first,, And when i got it working i thought what's this backgroundworker thing,,so i read up on what info MS had on the MSDN page..and slapped it in here..and i thought i had it working ok until i tried to move my project application to the side to reply to a instant message i got..and then i noticed that it froze up .and looked like it was using alot of system resources,But wait let me back up just a bit.originally i was trying it with a fairly small number of items, and then i seen on here where someone had posted a rather large index for testing his app with,,and while trying to load that list that's when the issue was noticed i don't really plan on loading a list as big as that test index was but, I would still like to know why the program did what it did using the code below.I'm not really asking for it to be too altered, i kinda like all the controls i have in it the moment,, and the way it loaded as well.
[code]...
I am getting a list of computer on my network. I want to run this code in the background but I keep getting an error. How do I delegate the TreeView.Error :The action being performed on this control is being called from the wrong thread
Dim rip As Integer
For rip = 1 To 254
Application.DoEvents()
If My.Computer.Network.Ping(IPArray(0) & "." & IPArray(1) & "." & IPArray(2) & "." & rip, 60) Then
[code]....
I'm trying to do some calculations with the backgroundworker and display a window with a loading animation on it. The calculation is working but the loading animation isnt moving.MeasurePolygons is the Sub that does the calculations and updates the variables to hold the values of the calculations which works fine. Its just the loading screen. It pops up as it should but just doesnt animate
Private Sub ClickEvent()
BackgroundWorker1.RunWorkerAsync()
If Window1.frmLoading Is Nothing Then
[code].....