我想在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();
}
任何支持将不胜感激。
答案 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.
}