Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8755561
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 13, 20262026-06-13T13:52:53+00:00 2026-06-13T13:52:53+00:00

I’m using C# and Winforms in Visual Studio 2010 I have a program with

  • 0

I’m using C# and Winforms in Visual Studio 2010

I have a program with which I am trying to read output through a serial port and print it to the screen. It originally started as a Console program but has now evolved to where we would like to have the output be in a field on a form. I have the code that parses out the output I’m looking for off the serial port written and working, I just need to change the Console.WriteLine to label.text = “”;, basically. I have merged the function that listens to the serial port into the GUI code so everything is in the same file.

I’m getting hung up on how to get the function to write to the label, though. It is STATIC so I cant just say ‘label.text =’. I tried creating a new form object inside the function to use, and that allowed me to access the control on the form, but doesnt update the form I see at runtime (I’m guessing because I’ve created a new instance of the form rather than accessed the existing instance?)

I need to have the serial listener run at the same time as the GUI as well, so the GUI label will update with the results it gets from running the function in close to real-time, so Ive tried to set it up to be threaded, with the GUI being one thread that is started by main() and the serial listener being another thread which is started when i click the button to start it. However, I run into the same issue with not being able to access the label in the serial listener thread because it has to be static to be initialized using system.threading.

I’m thinking maybe I need to use a background worker for the serial listener but I have absolutely zero experience with those. Would a background worker be able to update the label on the GUI in real time?

I cant post specific code but heres the general idea:

Main() starts GUIthread

GUI has button to start serial listener
OnClick button starts ListenerThread
ListenerThread outputs to console, want to output to a form label instead

Cant access GUI.Label because Listener is static out of necessity to be threaded
Creating new GUI instance inside Listener allows me to call the controls for that instance, but they dont update the GUI at runtime

have ensured label is public.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-13T13:52:54+00:00Added an answer on June 13, 2026 at 1:52 pm

    The BackgroundWorker class was essentially made just for this.

    Just have the DoWork method do your actual work, and ensure that ReportProgess is called while working as needed. You can pass any data as a string (or whatever else, if you want) and then use that value in the ProgressChanged event handler, which the form can handle to update it’s UI.

    Note that the BackgroundWorker will automatically ensure that the ProgressChanged and RunWorkerCompleted events run in the UI thread, so you don’t need to bother with that.

    Here’s a sample worker:

    public class MyWorker//TODO give better name
    {
        public void DoWork(BackgroundWorker worker)//TODO give better name
        {
            for (int i = 0; i < 100; i++)
            {
                Thread.Sleep(1000);//to mimic real work
                worker.ReportProgress(0, i.ToString());
            }
        }
    }
    

    And here’s an example of configuring the background worker. Here I use lambdas both because it’s convenient to be able to close over variables (i.e. use variables across each of these anonymous methods) but if you wanted to you could refactor each of the event handlers out into methods.

    private void button1_Click(object sender, EventArgs e)
    {
        var bgw = new BackgroundWorker();
        MyWorker worker = new MyWorker();
    
        bgw.WorkerReportsProgress = true;
        bgw.DoWork += (s, args) => { worker.DoWork(bgw); };
        bgw.ProgressChanged += (s, data) =>
        {
            label1.Text = data.UserState.ToString();
        };
        bgw.RunWorkerCompleted += (s, args) =>
        {
            label1.Text = "All Done!";
        };
    
        bgw.RunWorkerAsync();//actually start the worker
    }
    

    Note here that none of the controls in the form are public, none of them are static, and I’m not passing any references to my form outside of the class. It’s considered best form each Form to be responsible for updating it’s own Controls. You shouldn’t be allowing anyone else to directly access them. Rather than allowing some other worker class to directly access the label or modify it’s text, what’s happening is that the worker is simply telling the form, “Hey, I’ve got some data, you can go update yourself accordingly based on these values.” It is then the form that is responsible for updating itself. events are what you use to allow these workers, or other types of child elements (such as other forms you create, for example) to inform the “parent” form that it needs to update itself.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I am trying to loop through a bunch of documents I have to put
I have a string like this: La Torre Eiffel paragonata all&#8217;Everest What PHP function
I am trying to understand how to use SyndicationItem to display feed which is
I have an autohotkey script which looks up a word in a bilingual dictionary
I have an array which has BIG numbers and small numbers in it. I
I have a text area in my form which accepts all possible characters from
I'm trying to select an H1 element which is the second-child in its group
I have thousands of HTML files to process using Groovy/Java and I need to
I have a .ini file as follows: [playlist] numberofentries=2 File1=http://87.230.82.17:80 Title1=(#1 - 365/1400) Example
I'm new to using the Perl treebuilder module for HTML parsing and can't figure

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.