我得到一个名为Connect()的函数,因为它使用了一些API请求,所以这个函数需要大约2-3秒。现在我想找到一种方式,当我开始使用这个功能时,我的Ui不会冻结。C#Ui在调用方法时会冻结
private void connectToolStripMenuItem_Click(object sender, EventArgs e)
{
Connect() // << this tooks a lot of time
}
我试图与线程
private void connectToolStripMenuItem_Click(object sender, EventArgs e)
{
new Thread(Connect).Start();
}
和backgroudnworker
private void backgroundWorkerConnect_DoWork(object sender, DoWorkEventArgs e)
{
Connect();
}
但仍PROGRAMM冻结来解决它。
private void Connect()
{
if (InvokeRequired)
{
Invoke(new MethodInvoker(Connect));
}
else
{
if (!connected)
{
connected = true;
verbindenToolStripMenuItem.Enabled = false;
trennenToolStripMenuItem.Enabled = true;
InfoStripStatus.Text = "Status: Connected";
irc.joinRoom(channel, BotConnectingMessage);
chatThread = new Thread(getMessage);
chatThread.Start();
loadLoyalty();
updateTimer = new System.Threading.Timer(timerViewer, null, 0, 60000);
}
}
}
也许我只是做错了事,希望有人能帮助我。
开始一个新的线程不应该冻结UI,因为它有它自己的线程 –
而'连接();'方法不依赖或调用UI线程上的任何东西?如果你用'System.Threading.Thread.Sleep(3000)'替换'Connect()'中的任何东西;'它是否仍然冻结UI? (用最后两个选项对它进行测试) – rene
好吧,我试着用Connect()内容替换睡眠(3000),现在没有更多的冻结。但我不明白为什么,因为在连接()函数是没有什么需要那么久。我在顶部添加Connect()的内容:) –