我得到一個名爲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()的內容:) –