科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件利用VC# 创作简单的多线程组件

利用VC# 创作简单的多线程组件

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

可以编写能同时执行多个任务的应用程序。此能力是设计处理器密集型且要求用户输入的组件的强大方法

作者:佚名 来源:MSDN 2007年11月13日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
添加多线程处理功能

  上面的示例演示了只运行单个执行线程的应用程序的限制。在下一节,您将使用 Thread 类对象向组件添加多个执行线程。

  添加 Threads 子例程

  在代码编辑器中打开 Calculator.cs。

  在代码顶部附近,找到类声明,紧接着 { 的下方,键入下列代码:

// Declares the variables you will use to hold your thread objects.
public System.Threading.Thread FactorialThread;
public System.Threading.Thread FactorialMinusOneThread;
public System.Threading.Thread AddTwoThread;
public System.Threading.Thread LoopThread;

  在代码底部紧接着类声明结尾之前,添加以下方法:

public void ChooseThreads(int threadNumber)
{
// Determines which thread to start based on the value it receives.
switch(threadNumber)
{
case 1:
// Sets the thread using the AddressOf the subroutine where
// the thread will start.
FactorialThread = new System.Threading.Thread(new
System.Threading.ThreadStart(this.Factorial));
// Starts the thread.
FactorialThread.Start();
break;
case 2:
FactorialMinusOneThread = new
System.Threading.Thread(new
System.Threading.ThreadStart(this.FactorialMinusOne));
FactorialMinusOneThread.Start();
break;
case 3:
AddTwoThread = new System.Threading.Thread(new
System.Threading.ThreadStart(this.AddTwo));
AddTwoThread.Start();
break;
case 4:
LoopThread = new System.Threading.Thread(new
System.Threading.ThreadStart(this.RunALoop));
LoopThread.Start();
break;
}
}

  当实例化 Thread 对象时,它要求一个 ThreadStart 对象形式的参数。ThreadStart 对象是一个指向开始线程的方法的地址的委托。ThreadStart 对象不能接受参数或者传递值,因此只能表示 void 方法。刚才实现的 ChooseThreads 方法将从调用它的程序接收一个值,并使用该值来确定要启动的适当线程。

  向 frmCalculations 添加适当的代码

  在代码编辑器中打开 frmCalculations.cs 文件,然后找到 protected void btnFactorial1_Click。

  注释掉直接调用 Calculator1.Factorial1 方法的行,如下所示:

// Calculator1.Factorial()

  添加下列行,以调用 Calculator1.ChooseThreads 方法:

// Passes the value 1 to Calculator1, thus directing it to start the
// correct thread.
Calculator1.ChooseThreads(1);

  对其他 button_click 子例程作类似的修改。

  注意 一定要为 Threads 参数包含适当的值。

  完成后,代码看起来应该类似以下形式:

protected void btnFactorial1_Click(object sender, System.EventArgs e)
// Passes the value typed in the txtValue to Calculator.varFact1
{
Calculator1.varFact1 = int.Parse(txtValue.Text);
// Disables the btnFactorial1 until this calculation is complete
btnFactorial1.Enabled = false;
// Calculator1.Factorial();
Calculator1.ChooseThreads(1);
}

protected void btnFactorial2_Click(object sender, System.EventArgs e)
{
Calculator1.varFact2 = int.Parse(txtValue.Text);
btnFactorial2.Enabled = false;
// Calculator1.FactorialMinusOne();
Calculator1.ChooseThreads(2);
}
protected void btnAddTwo_Click(object sender, System.EventArgs e)
{
Calculator1.varAddTwo = int.Parse(txtValue.Text);
btnAddTwo.Enabled = false;
// Calculator1.AddTwo();
Calculator1.ChooseThreads(3);
}

protected void btnRunLoops_Click(object sender, System.EventArgs e)
{
Calculator1.varLoopValue = int.Parse(txtValue.Text);
btnRunLoops.Enabled = false;
// Lets the user know that a loop is running
lblRunLoops.Text = "Looping";
// Calculator1.RunALoop();
Calculator1.ChooseThreads(4);
}
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章