gpt4 book ai didi

c# - 调用Invoke挂起程序

转载 作者:太空宇宙 更新时间:2023-11-03 11:11:43 26 4
gpt4 key购买 nike

基本上,这就是发生的事情。我有一个线程(无限循环)在显示表单时作为后台进程运行。该线程检查是否需要添加新的 ToolStripMenuItem。

如果满足条件,我将需要使用 Invoke 来创建 UI 对象,对吗?问题是,当调用 this.Invoke 或 BeginInvoke 时,表单变得无响应,而执行检查的线程仍在正常运行。有什么想法吗?

这是我第一次尝试这个多线程的东西。我确定我错过了一些东西。

 public void ThreadSetCom()
{
while (true)
{
string[] tmpStrPort = System.IO.Ports.SerialPort.GetPortNames();
IEnumerable<string> diff = tmpStrPort.Except(strPort);
strPort = tmpStrPort;
System.Console.WriteLine(System.IO.Ports.SerialPort.GetPortNames().Length);
foreach (string p in diff)
{
var cpDropdown = (ToolStripMenuItem)msMenu.Items["connectToolStripMenuItem"];
cpDropdown = (ToolStripMenuItem)cpDropdown.DropDownItems["connectReaderToolStripMenuItem"];

ToolStripMenuItem tsmi = new ToolStripMenuItem();
tsmi.Text = p;
tsmi.Name = p;
tsmi.Click += new EventHandler(itm_Click);

if (this.msMenu.InvokeRequired)
{
GUIUpdate d = new GUIUpdate(ThreadSetCom);
this.Invoke(d);
}
else
{
cpDropdownList.DropDownItems.Add(tsmi);
}
}
}
}

最佳答案

您的ThreadSetCom 方法永远不会退出:

while (true)

...没有returnbreak 语句。这将永远挂起 UI 线程。

不清楚您要实现的目标,但您肯定不希望在 UI 线程中像那样循环。我认为你不想在任何线程中以紧密的方式循环,请注意...

关于c# - 调用Invoke挂起程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13776552/

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