如何从C#中的另一个非UI线程更新文本标签

达马里奥斯

我有一个主线程,用于为表单启动线程。我想从主线程更新label1文本。我已经创建了我的委托和我的委托来更新它,但是我不知道如何访问表单线程和修改label1文本。

这是我的主要代码:

public class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>

    [STAThread]
    static void Main()
    {
        //Thread l'affichage de la form
        Program SecondThread = new Program();
        Thread th = new Thread(new ThreadStart(SecondThread.ThreadForm));
        th.Start();  

        //Update the label1 text

    }

    public void ThreadForm()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());

    }

}

这是我的form1的代码:

 public partial class Form1 : Form
{

    public delegate void SetTextLabelDelegate(string text);

    public void SetTexLabel(string text)
    {
        if (this.label1.InvokeRequired)
        {
            SetTextLabelDelegate SetLabel = new SetTextLabelDelegate(SetTexLabel);
            this.Invoke(SetLabel, new object[] { text });
        }
        else
        {
            this.label1.Text = text;
            this.Refresh();
        }       
    }

    public Form1()
    {
        InitializeComponent();
    }
}

如何访问表单线程并修改label1文本?我正在使用C#和.Net 4.5。

约翰·莱特

您需要访问第二个线程上的Form对象,因此需要在Program类中公开它。然后,在您的主目录中,您应该能够通过该暴露的属性进行设置。

public class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>

    [STAThread]
    static void Main()
    {
        //Thread l'affichage de la form
        Program SecondThread = new Program();
        Thread th = new Thread(new ThreadStart(SecondThread.ThreadForm));
        th.Start();  

        //Update the label1 text
        while (SecondThread.TheForm == null) 
        {
          Thread.Sleep(1);
        } 
        SecondThread.TheForm.SetTextLabel("foo");

    }

    internal Form1 TheForm {get; private set; }

    public void ThreadForm()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        var form1 = new Form1();
        Application.Run(form1);
        TheForm = form1;

    }


}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C#中的另一个线程上运行的循环中更新文本框

来自分类Dev

C#/ WPF从另一个类中创建的另一个线程更新UI

来自分类Dev

C#-如何从另一个类中的线程更新主UI

来自分类Dev

从另一个表单更新文本框。C#

来自分类Dev

在另一个线程中从模块更新标签

来自分类Dev

在另一个线程中从模块更新标签

来自分类Dev

android:从另一个类中的另一个线程更新UI

来自分类Dev

当任务在android中的另一个线程中运行时,如何更新UI?

来自分类Dev

如何从C#中的另一个线程在主线程中设置变量?

来自分类Dev

如何从C#中的另一个线程在主线程中设置变量?

来自分类Dev

如何从另一个输入动态更新文本值

来自分类Dev

从另一个线程调用方法而不会阻塞该线程(或为非UI线程编写自定义SynchronizationContext)C#

来自分类Dev

从另一个线程调用方法而不会阻塞该线程(或为非UI线程编写自定义SynchronizationContext)C#

来自分类Dev

如何阻塞线程,直到另一个线程在C#中获得服务器响应

来自分类Dev

从另一个线程更新 UI c++ Windows Form 应用程序

来自分类Dev

如何获得标签以从Swift中的另一个标签提取文本?

来自分类Dev

通知线程停止-在另一个线程和类中引发事件-C#

来自分类Dev

C#:使用线程从另一个类更新表单属性

来自分类Dev

从另一个类 C# 更新标签不起作用

来自分类Dev

如何从另一个窗体Visual Basic中的标签更改文本?

来自分类Dev

在Cloud Firestore中创建另一个字段时,如何更新文档中的字段?

来自分类Dev

在C#中,是否可以保证任何给定线程都可以看到从另一个线程到引用类型变量的值所做的更新?

来自分类Dev

C#线程在另一个类中启动

来自分类Dev

在Unity / C#中,.Net的async / await是否确实从另一个线程开始?

来自分类Dev

使用Firebase功能创建另一个文档时,如何更新文档中的数据?

来自分类Dev

使用Firebase功能创建另一个文档时,如何更新文档中的数据?

来自分类Dev

c#设置/从另一个线程/从另一个线程获取控件的属性

来自分类Dev

从C ++ 11中的另一个线程解锁一个线程

来自分类Dev

C#从另一个列表更新列表

Related 相关文章

  1. 1

    如何在C#中的另一个线程上运行的循环中更新文本框

  2. 2

    C#/ WPF从另一个类中创建的另一个线程更新UI

  3. 3

    C#-如何从另一个类中的线程更新主UI

  4. 4

    从另一个表单更新文本框。C#

  5. 5

    在另一个线程中从模块更新标签

  6. 6

    在另一个线程中从模块更新标签

  7. 7

    android:从另一个类中的另一个线程更新UI

  8. 8

    当任务在android中的另一个线程中运行时,如何更新UI?

  9. 9

    如何从C#中的另一个线程在主线程中设置变量?

  10. 10

    如何从C#中的另一个线程在主线程中设置变量?

  11. 11

    如何从另一个输入动态更新文本值

  12. 12

    从另一个线程调用方法而不会阻塞该线程(或为非UI线程编写自定义SynchronizationContext)C#

  13. 13

    从另一个线程调用方法而不会阻塞该线程(或为非UI线程编写自定义SynchronizationContext)C#

  14. 14

    如何阻塞线程,直到另一个线程在C#中获得服务器响应

  15. 15

    从另一个线程更新 UI c++ Windows Form 应用程序

  16. 16

    如何获得标签以从Swift中的另一个标签提取文本?

  17. 17

    通知线程停止-在另一个线程和类中引发事件-C#

  18. 18

    C#:使用线程从另一个类更新表单属性

  19. 19

    从另一个类 C# 更新标签不起作用

  20. 20

    如何从另一个窗体Visual Basic中的标签更改文本?

  21. 21

    在Cloud Firestore中创建另一个字段时,如何更新文档中的字段?

  22. 22

    在C#中,是否可以保证任何给定线程都可以看到从另一个线程到引用类型变量的值所做的更新?

  23. 23

    C#线程在另一个类中启动

  24. 24

    在Unity / C#中,.Net的async / await是否确实从另一个线程开始?

  25. 25

    使用Firebase功能创建另一个文档时,如何更新文档中的数据?

  26. 26

    使用Firebase功能创建另一个文档时,如何更新文档中的数据?

  27. 27

    c#设置/从另一个线程/从另一个线程获取控件的属性

  28. 28

    从C ++ 11中的另一个线程解锁一个线程

  29. 29

    C#从另一个列表更新列表

热门标签

归档