.net Simple Threaded GUI Based Program - Where To Put The Thread
Oct 12, 2009
I have written a small GUI based vb.net program that speaks to embedded devices via the com port. The GUI code contains a class which all communication to the embedded device is handled through (com port device, communication protocol, parsing info, holding device related info after each read).That class is called EDComms.
I wanted to add a thread so that the EDComms object could run in the background and report back as it downloads logs files and such (It can take a while to get log files from the device sometimes).So. Should I have EDComms inherit from backgroundworker thread? Or should I have a background worker thread as a member of EDComms?Right now I am going with the second choice. The only thing I have to do now is write a func for registering two delegates from the GUI for notifying task progress, and notifying task complete.Or is there a better choice than these two I have presented Perhaps have the thread as a member of the GUI?
I'm having a small issue; I start a process and when that process exits, I raise an event which removes a control from my form.It all works perfectly until the part where I want to remove a control from my form. Visual Studio gives me a cross-thread exception even though I'm programming single threaded.
I have a console application (VB.NET). When it is started, it spawns worker threads to find work in the database and do the task, then look for the next task (A workflow basically).
The problem that I have is that I have my Event Handler in the main thread that spawns the worker threads. Those workers, if they error, raise an event to a public delegate. However my main thread is not detecting these events, and I cannot figure out how to make it. My intention is to do all logging (text/database), email alerts, and restarting the worker to find another task that is not errored. (This will be expanded in the LogErrorMessage routine and such, for now I am just keeping it a simple Console.Writeline so that I can see if the method is being fired or not)
Here is the code around what I am trying to do:
Logger Class:
Public Delegate Sub LogDelegateError(ByVal Ex As Exception) Public Class EventLogger Public Event EventError As LogDelegateError
I am trying to create a new thread that will import from an excel spreadsheet, because it was doing all the import before the form actually displayed to the screen. So the user never saw the form while it was importing..In the form's load event I create the thread and start it, but I get this large error:An error occurred creating the form. See Exception.InnerException for details. The error is: ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the current thread is not in a single-threaded apartment.
I am using visual studio 2005 pro on Vista Business?
I was looking to do some simple manipulations of variables based on what tab was selected.But I dont see Deselected, Or Selecting as in this example, does 2005 use somthing different?
vb Private Sub TabControl1_Deselecting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TabControlCancelEventArgs) Handles TabControl1.Deselecting someClassLevelVariable = e.TabPageIndex End Sub
Yup,not PHP but it's the same for readability)As you may imagine I want to make a simple text based rpg game, but that's not an important fact.The buttons btn1 to btn3 are already created at the designer, and there are going to be other procedures which will assign values to their text property according to the game context (main menu, combat, shopping, training, etc.) you're at.Ok, so what I want to do with that procedure I pasted is to parse the text of ANY of those buttons when I click them, and according to its value select a case which will trigger another appropriate procedure (now there are only msgboxes as placeholders for testing only).My problem is that I dont know how to refer to the originating class of the handled event! I mean, let's say I click btn2. I'll want to immediately get the text property of that button only and use it as the value for the select case tree. I suppose I need to put something at that ?I wrote there, but I don't have any idea. The first time I was so naive to put me.text in there, and of course it returned the form name. Is there's something to do this thing...? I thought at first it would be a very simple task, but I'm going nuts searching for a solution so it's like if it was not possible, but I find hard to believe that, because this would be very useful, right? By the way, what I want to achieve is not needing to make a separate procedure for each button and to avoid as well the need to move any game option to another procedure if later on I want to rearrange the menus, because I expect the game to have more than three buttons actually.
I'm setting up a simple app that has 2 variables, one from a combobox and one from a textbox.Putting all my code directly in the button1_click sub works just fine, however, I wanted to add a marquee progress bar so I tried to implement a backgroundworker.
[code]...
and call it with Me.Invoke(New SetComboBoxTextDelegate(AddressOf SetComboBoxText), ComboBox1.Text)but it still throws the Cross-thread operation invalid error.
I have build a VB.Net windows application which does uploads data into database and basically updates two controls:
1. A textbox which is constantly updated with one line per database record upload.
2. A label which keeps track of the count of database record uploaded.
I have used BackgroundWorker thread concept, where the thread's bgwWorker_DoWork() method contains the business logic for upload and bgwWorker_ ProgressChanged() updates the 2 UI controls based on uploads.But the issue I am facing is that I do not get complete updates on both the UI controls. Sometimes the thread bypasses update of textbox and sometimes of label. I could resolve this issue by adding System.Threading.Thread.Sleep(25) before each UI control update code.[code]
I have a procedure at the end of my console application that ask the user to either hit enter to end the program, or type s to perform another search. The issue I'm having is no matter what the user types in the program end. What I would like to happen is if the user types s, then the program starts over and lets the user perform another search. The program is procedural and I need to find a way to start back off at the top of the program which ask the user to type a name to search.
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".
"Cross-thread operation not valid: Control 'Panel1' accessed from a thread other than the thread it was created on." The reason I am getting this error is because I am opening up a new form and then calling these three things:
Panel1.Show() Label1.Show() Label2.Show()
why I get this error message because it doesn't occur normally if I open Form2 after closing Form1, it only occurs when I open Form2 after closing Form4.
When my client try to connect to server I'm getting this error : Cross-thread operation not valid: Control 'l_users' accessed from a thread other than the thread it was created on.
Private Sub _socketManager_onConnectionAccept(ByVal SocketID As String) Handles _socketManager.onConnectionAccept l_Users.Items.Add(SocketID) End Sub
Would anyone be able to help me here please. I'm fairly new to VB.net and threading so im just trying to figure out what is happening.When I debug this I am getting the error thread operation not valid: Control 'ProgressBar1' accessed from a thread other than the thread it was created on.
I'm a little lost as to why the error is occuring or how to fix it. I've had to put the progress bar in a separate thread otherwise the GUI crashes
My understanding is that thread.join will suspend the execution of code on the calling thread until the spawned thread finishes or is aborted...
With that in mind, I tried this:
For i = 1 to 50 threads = New Thread(AddressOf test) threads.IsBackground = True threads.SetApartmentState(ApartmentState.STA)
[CODE]...
However, the rest of the code runs when the loop finishes, not waiting for all the spawned threads to finish. Since the rest of the code needs the threads to finish (otherwise the rest will error).
I have written an application that loads a form - frmCad as well as AutoCad. It does this via a class which detects when AutoCad quits.
Friend Class CadApp Private WithEvents AppObject As AcadApplication... Private Sub AppObject_BeginQuit(ByRef Cancel As Boolean) Handles AppObject.BeginQuit RaiseEvent Quit() End SubEnd Class
My main class loads frmCad as well as CadApp.
Public Class Cad Private WithEvents frmCad As CadForm Private WithEvents app As CadApp... Public Sub ShowForm() If frmCad Is Nothing Then frmCad = New CadForm frmCad.Visible = True End Sub... Private Sub app_Quit() Handles app.Quit frmCad.Dispose() frmCad = Nothing .... End Sub
When I debug the program, it stops at frmCad.Dispose()The program continues to execute, but all the code after it fails to work.Looking more carefully I get an error message which contains:-Cross-thread operation not valid: Control 'Autocad' accessed from a thread other than the thread it was created on.
My error:Cross-thread operation not valid: Control 'label2' accessed from a thread other than the thread it was created on. I want to be able to give my Public RunBot() sub access to edit Labels, buttons, etc without an error.
My problem is Cross-thread operation not valid: Control 'statusHO' accessed from a thread other than the thread it was created on.
System.InvalidOperationException was unhandled Message="Cross-thread operation not valid: Control 'statusHO' accessed from a thread other than the thread it was created on." Source="System.Windows.Forms" StackTrace:
[Code]...
i used it and it works fine then. but as it is mentioned its not a good practice to use it. So what should i do? is it ok if i use this as i am not able to use correct practice. Mine application is not for enterprise purpose. its just my class project, and it works fine even if i put application working in background. System works ok. I dont know how to correct this error.As i dont have that much knowlege of threads.
So please guide me how to fix this in correct way otherwise i am force to go for bad programming practice Please refer to Windows Mobile Developer Center > Smart Device Development Forums > Windows Mobile Development > Appendtext not working for all my code details
Im trying to create a program with a simple gui that enables me to search for and select parent folders containing child folders containing multiple files and then validate those files based off of constants i set per child folder and file.
Example
User selects Parent FolderX Parent FolderX > (ChildFolder1 ( Constant for ChildFolder1 says open file 4 ) > File 4
Compare multiple strings of text in a specific order based off of file name to constants i have set for that named file Then continue to ChildFolder2 ( Constant for ChildFolder2 says open file 16 ) > File 16 Compare multiple strings of text in a specific order based off of file name to constants i have set for that named file If there is any constants not read in one of the files after all have been checked, return msgbox with a notification and write .txt log with child folder and file names to specified directory?
i want to make a simple program that can be used of add,delete,edit,save,, thats all, so that i will understand the basic of programing.so that in that program i will developed it and also connection of vb2005 to sql server 2005.. i am amateur here using this vb2005 and sql server 2005.
I want to distribute a fairly simple program developed on Visual Studio 2008. I have tried to use the publish features in the IDE. It creates a folder with various information and stores it on my fileserver.When I try to install the program on another computer I get a lengthy message about the need to install Powerpack 9. 0.0.0 So I go back to my dev computer and edit the publish information. On prerequisites I do not find Powerpack 9 but Powerpack 3. I put that in and redo the publishing. The installation now install that package but then it says it requires powerpack 9.0.0.0 and ends?
i am had lots of trouble in finishing a simple program.well my program had one listbox one command button the list box is loaded with proxies.when i input the query url in textbox it and pressed command button it will query search engines and retain rank.it also click our url to verify drilldown it
1.load the proxies 2.input the URL 3.click command button 4.perform querying and clicking task on search engines
my pc was crashed recently so i am unable to upload the program here.can someone kindly me(newbie)to finish this simple task?
I said in a thread this week that I would set out to construct a program using the WMP component and this time, unlike in my last one, it is set up to allow any folder to be chosen. It's safe, even if the user chooses a folder with no .mp3 files in it, but it's goal is to look through all folders/subfolders, find the .mp3 files, get the path and the meta information about it, then show it in a listview.
The user has a few options such as playing the first song when a list is loaded, setting it to shuffle, etc., and all settings are saved automatically. Also, when they choose a folder to use to get their music, the next time around it remembers this also (although this latter one is done by saving the path to a text file so that you can, optionally, edit that before you send it out -- without having to change the code to do it).
I have it looking at events so that no matter what they change (click for the next song, change the volume, change one of the checkboxes, etc.), it will re-focus the listview so that the song presently playing is highlighted.[code]...
I am trying to build a simple app that will start another program.The command line that works in a dos batch file is c:program filespixellWall Controlwallctl.exe -layout=c:1.lay with my code below this works, c:program filespixellWall Controlwallctl.exe but the switch info above doesnt get passed, I get a run time error.
Public Class Form1 Dim layout1 As String Dim layout2 As String
I am trying to create a simple DVD Player with Visual Basic 2008 (Express). But I am trying to find this item for the Toolbox-"MSWebDVD".
Does anybody have, like a download link to get it for VB 2008? If you do provide me with a download link, then I would kindly ask to tell me on how to apply it.