【问题标题】:How to set the windows title on a form called in different thread?如何在不同线程中调用的窗体上设置窗口标题?
【发布时间】:2013-11-19 17:22:57
【问题描述】:

我有 2 个表格:Form1 和 Form2。
在 Form1 中,我通过单击 Button1 在新线程中打开 Form2。
我想设置 Form2 的标题,但我不知道如何以及是否有可能。这是来自 Form1 的代码,Form2 只是一个空表单:

Public Class Form1
    Dim TH As New Threading.Thread(AddressOf FormShow)

    Private Shared Sub FormShow()
        Dim FF As New Form2
        FF.Show()
        Do While FF.Visible
            Threading.Thread.Sleep(100)
            Application.DoEvents()
        Loop
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        TH.Start()
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        'How to change the Form2 title?
        'I need something like : TH.Form2.Text="NewTitle"?
    End Sub
End Class

如果我启动代码并单击 Button1,Form2 将打开。但是,当我在 Form1 上按 Button2 时,如何更改 Form2 中的窗口标题?有任何想法吗?谢谢。

【问题讨论】:

  • 为什么在不同的线程中需要 Form2?你在这里解决什么问题?一般来说,跨线程访问表单会导致比其价值更多的问题......
  • 我的应用程序基本上有 2 个线程。线程 1 = 带有“停止”按钮的表单。线程 2 = CPU 密集型计算。因此,如果我单击“停止”上的表单,整个应用程序将退出。我在这里需要的是在进程之间获取或设置一些数据。如果有更好的方法我会做的。
  • 正确的做法是将WORK(不是Form)移到不同的线程上。搜索 BackgroundWorker() 控件,您将获得十亿个示例。
  • 所以你描述了你想要做的任务。您要解决的问题是什么?
  • 我不知道 - 问题部分是与我一起工作的疯狂教授的任务。他会在我的软件中编写自己的计算脚本。我的软件会将代码转换为 exe 并使用线程运行它。

标签: vb.net multithreading


【解决方案1】:

根据我上面的评论:

正确的方法是将 WORK(而不是 Form)移动到 不同的线程。搜索 BackgroundWorker() 控件并 你会得到十亿个例子。

从技术上讲,您可以在原始问题中做您想做的事情,但是:

Public Class Form1
Public Shared FF As New Form2

    Dim TH As New Threading.Thread(AddressOf FormShow)

    Private Sub FormShow()
        Application.Run(FF)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        TH.Start()
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        If Not IsNothing(FF) AndAlso Not FF.IsDisposed Then
            FF.BeginInvoke(Sub(title)
                               FF.Text = title
                           End Sub, New Object() {"Hello"})
        End If
    End Sub

End Class

不过,这不是推荐的方法!

【讨论】:

  • 非常感谢,效果很好。我还将检查 BackgroundWorker 示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多