我有一個應用程序,將從SQL查詢到的項目添加到我的主WPF窗體上的列表框中。查詢需要很長時間,所以我將它添加到自己的線程中。我有另一個線程,顯示一個新的表單,請等待gif動畫。從任何窗體或線程停止線程
所以我總共有3個主題。
線程中運行SQL查詢主界面線程 - 線程命名SQL_THREAD
線程打開/顯示新實例的請稍候形式就可以了GIF動畫。 - 線程名please_wait_thread
我想取消線程的能力,從運行上please_wait_thread一個取消按鈕的SQL查詢,顯示形式有請稍候GIF動畫。
我很難理解繼承以及如何在表單之間引用對象。我知道如何創建它們的新實例,但不讓它們通信。
如果我把下面的代碼放在please_wait表單中並輸入sql_thread,它就看不到sql線程。
public void Cancel_btn_Click(object sender, EventArgs e)
{
sql_thread.abort();
}
當我關閉please_wait表單時,如何停止它的軌道中的sql_thread?
在主表單上創建sql_thread的代碼如下。
private void btn_search_Click(object sender, EventArgs e)
{
Thread sql_thread = new Thread(sql_search_method);
}
P.S.我已經嘗試過一個背景工作,但它沒有工作,一旦碰到長查詢,就沒有辦法阻止它,直到它完成一個背景工作。
首先,您應該使用DbContext對象,而不是手動管理您自己的線程以進行數據庫調用... – Codeman
使用'Task'和'CancellationToken'(iirc)。 – IAbstract
很高興知道,您是否有如何使用表單「B」中的CancellationToken取消表單「A」上的任務的示例?表格之間的交流似乎是我最大的擔憂。 –