在后台工作者运行方法

时间:2015-06-26 07:01:28

标签: c# winforms methods backgroundworker

我想在windows窗体中运行后台worker中的方法。 完成每种方法后,这些方法生成的输出将显示在标签中。

我对后台工作者的了解很少。有人可以指导我如何实现这一目标。我累了,但它说线程无法访问表单中的控件。

以下是我的两种方法的代码,当用户点击按钮时,这两种方法都会同时执行。

 private void program_green()
        {
            string stdOut = null;
            string stdError = null;
            string address = "192.168.1.100";
            string user = "user";
            string pass = "password";
            SshExec ssh = new SshExec(address, user, pass);
            ssh.Connect();
            ssh.RunCommand("cfg_green " + green_textBox1.Text + " " + green_textBox2.Text + " " + green_textBox3.Text, ref stdOut, ref stdError);
            green_output.Text = stdOut;
            ssh.Close();

        }

        private void program_grey()
        {
            string stdOut = null;
            string stdError = null;
            string address = "192.168.1.100";
            string user = "user";
            string pass = "password";
            SshExec ssh = new SshExec(address, user, pass);
            ssh.Connect();
            ssh.RunCommand("cfg_grey " + grey_textBox1.Text + " " + grey_textBox2.Text + " " + grey_textBox3.Text, ref stdOut, ref stdError);
            grey_output.Text = stdOut;
            ssh.Close();
        }

任何支持将不胜感激。

3 个答案:

答案 0 :(得分:0)

请参阅以下链接 -

https://msdn.microsoft.com/en-us/library/cc221403%28v=vs.95%29.aspx

http://www.codeproject.com/Articles/99143/BackgroundWorker-Class-Sample-for-Beginners

http://www.codeproject.com/Articles/841751/MultiThreading-Using-a-Background-Worker-Csharp

在工作人员的DoWork事件中,只需调用两种方法即可。如果您想单独跟踪和处理这两种方法,请有2名后台工作人员。

点击你的按钮,调用worker对象的RunWorkerAsync方法

答案 1 :(得分:0)

class BackgroundWork
{
    private Thread thread1;

    private Thread thread2;

    private void StartObserving() {

       thread1 = new Thread(this.program_green);

       thread1.Start();

       thread2 = new Thread(this.program_grey);

       thread2.Start();
    }


 }

答案 2 :(得分:0)

此链接有一个很好的 https://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker(v=vs.110).aspx

通过UI(主)线程访问UI组件非常重要。

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    // background process by worker thread
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    // handled the event by UI thread.
}