我有一个应用程序,它将从SQL查询的项添加到我的主WPF表单上的列表框中。查询需要很长时间,所以我将它添加到自己的线程中。我有另一个线程,显示一个新的表单,上面有一个请等待的gif动画。
所以我总共有3个帖子。
主GUI线程
线程运行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。我已经尝试了一个后台工作但它没有工作,一旦它遇到长查询就没有办法阻止它直到完成后台工作。
答案 0 :(得分:0)
您是否尝试将SQL线程存储为使用它的其中一个类中的公共静态线程或线程列表?然后,您应该能够从您需要的任何上下文中访问它。只要你没有使用线程来操纵自己,你应该没事。
虽然正如@ pheonixblade9指出的那样,.NET框架已经有了这样做的工具,并研究DbContext类是否适用于您的目的是个好主意。