gpt4 book ai didi

c# - 多线程代码卡在 Form.ShowDialog() 语句中

转载 作者:行者123 更新时间:2023-11-30 15:42:20 35 4
gpt4 key购买 nike

我是 C# 的新手,正在尝试编写一个表格来测试网络连接。这个想法是将连接部分放在一个线程中,并在连接期间显示一个进度对话框。以下是我的代码:

Form_TestingConnection testingConnection = new Form_TestingConnection();
Thread t1 = new Thread(TestConnection);

try
{
testingConnection.ShowDialog();
t1.Start();
}
catch (Exception ex)
{
Logger.Error(ex);
if (MessageBox.Show(
Resources.message_connection_issue,
Resources.title_connection_issue,
MessageBoxButtons.OK, MessageBoxIcon.Error) == DialogResult.OK)
{
loginSuccessful = false;
}
}

TestConnection 是一种测试连接的方法,并根据结果设置一个静态成员loginSuccessful。我现在遇到的问题是代码卡在了 testingConnection.ShowDialog() 上。每当它执行到这个地方时,它永远不会前进。有什么建议么?非常感谢。

最佳答案

ShowDialog模态显示表单。这意味着该表单将显示,所有其他表单将被禁用,并且 ShowDialog 函数将不会返回,直到模态对话框关闭。

使用Show反而。这显示了无模式的形式。当您这样做时,Show 函数会立即返回并且表单保持打开状态。

您可以将 ShowDialog 视为同步,将 Show 视为异步。

确保线程中需要更新表单进度的任何方法都使用 InvokeBeginInvoke 调用,以确保它们在主线程的上下文中运行界面线程。

最后,您的代码不会等到线程完成它的工作。 try/catch block 仅包装表单显示和线程执行的开始 (t1.Start())。当您在调用异步返回的线程上调用 Start 并且线程继续执行其工作时。我不太确定您的代码试图做什么,但我怀疑 catch block 应该在线程内。

关于c# - 多线程代码卡在 Form.ShowDialog() 语句中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7635179/

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