gpt4 book ai didi

C# 从另一个线程调用 form.show()

转载 作者:IT王子 更新时间:2023-10-29 04:41:22 25 4
gpt4 key购买 nike

如果我从另一个线程对 WinForms 对象调用 form.show(),表单将抛出异常。我可以通过什么方式向主应用程序线程添加新的可见表单?否则,如何在不停止当前正在执行的线程的情况下打开表单?

这是我的示例代码。我试图启动一个线程,然后在该线程中执行一些工作。随着工作的进行,我会展示这个表格。

public void Main()
{
new Thread(new ThreadStart(showForm)).Start();
// Rest of main thread goes here...
}

public void showForm()
{
// Do some work here.
myForm form = new myForm();
form.Text = "my text";
form.Show();
// Do some more work here
}

最佳答案

尝试使用调用:

public static Form globalForm;

void Main()
{
globalForm = new Form();
globalForm.Show();
globalForm.Hide();
// Spawn threads here
}

void ThreadProc()
{
myForm form = new myForm();
globalForm.Invoke((MethodInvoker)delegate() {
form.Text = "my text";
form.Show();
});
}

“invoke”调用告诉表单“请在您的线程而不是我的线程中执行此代码。”然后,您可以从委托(delegate)中更改 WinForms UI。

有关 Invoke 的更多文档在此处:http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx

编辑:您需要使用已经存在的 WinForms 对象才能调用 invoke。我在这里展示了如何创建全局对象;否则,如果您有任何其他 Windows 对象,它们也可以正常工作。

关于C# 从另一个线程调用 form.show(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11995466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com