C#-窗体中的线程

本文关键字:线程 窗体 C#- | 更新日期: 2023-09-27 18:20:17

可能重复:
如何在C#中从另一个线程更新GUI?

我有一个包含textBox1和textBox2的表单。我需要一个非常简单的额外线程的例子来填充textBox2,只是为了理解原理。到目前为止,我使用MessageBox来显示值,但我想使用textBox2。这是我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace Threads_example
{
    public partial class Form1 : Form
    {
        Thread t = new Thread(t1);
        internal static int x1 = 1;

        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }

        static void t1()
        {
            do
            {
                x1++;
                MessageBox.Show("x1 - " + x1.ToString());
            }
            while(x1<10);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            t.Start();
            for (int x = 1; x < 100000; x++)
            {
                textBox1.Text = x.ToString();
                textBox1.Refresh();
            }
        }
    }
}

C#-窗体中的线程

您需要在GUI线程中调用UI操作。它可以用这样的东西来完成:

private void RunFromAnotherThreadOrNot()
{
           if (InvokeRequired)
           {
               Invoke(new ThreadStart(RunFromAnotherThread));
               return;
           }

           textBox2.Text = "What Ever";
           // Other UI actions
}