简单的线程编程

mik*_*ike 3 c# multithreading winforms

我已经开始在c#中使用线程,但现在需要帮助,这是我的代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        DoCount();
    }
    public void DoCount()
    {
        for (int i = 0; i < 100; i++)
        {
            objTextBox.Text = i.ToString();
            Thread.Sleep(100);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它是一个简单的胜利形式与文本框,我想看到"计数",但正如你在我的代码中看到的,文本框显示我99,它计数到99然后显示..我会想,我必须在一个新的线程中管理这个,但不知道如何!

Mar*_*ers 8

使用BackgroundWorker.MSDN上有BackgroundWorker概述.

以下是代码的外观示例:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker backgroundWorker = (BackgroundWorker)sender;
        for (int i = 0; i < 100; i++)
        {
            backgroundWorker.ReportProgress(i);
            Thread.Sleep(100);
        }
    }

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        textBox1.Text = e.ProgressPercentage.ToString();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        backgroundWorker1.RunWorkerAsync();
    }
}
Run Code Online (Sandbox Code Playgroud)

其他说明:


Ala*_*son 7

这可能是您正在寻找的:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        DoCount();
    }
    public void DoCount()
    {
        Thread t = new Thread(new ThreadStart(delegate
        {
           for (int i = 0; i < 100; i++)
           {
               this.Invoke((Action) delegate { objTextBox.Text = i.ToString(); });
               Thread.Sleep(1000);
           }
        }));
        t.IsBackground = true;
        t.Start();
    }
}
Run Code Online (Sandbox Code Playgroud)

笔记

  1. 使用基本线程而不是BackgroundWorker
  2. 使用Invoke更新UI线程上的文本框
  3. IsBackground设置为true,以便在循环完成之前关闭表单时退出程序.