从任何形式或线程

时间:2015-04-22 22:20:10

标签: c# sql multithreading

我有一个应用程序,它将从SQL查询的项添加到我的主WPF表单上的列表框中。查询需要很长时间,所以我将它添加到自己的线程中。我有另一个线程,显示一个新的表单,上面有一个请等待的gif动画。

所以我总共有3个帖子。

  1. 主GUI线程

  2. 线程运行SQL查询 - 名为sql_thread的线程

  3. 线程打开/显示请用Gif动画等待表单的新实例。 - 线程名称please_wait_thread

  4. 我希望能够从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。我已经尝试了一个后台工作但它没有工作,一旦它遇到长查询就没有办法阻止它直到完成后台工作。

1 个答案:

答案 0 :(得分:0)

您是否尝试将SQL线程存储为使用它的其中一个类中的公共静态线程或线程列表?然后,您应该能够从您需要的任何上下文中访问它。只要你没有使用线程来操纵自己,你应该没事。

虽然正如@ pheonixblade9指出的那样,.NET框架已经有了这样做的工具,并研究DbContext类是否适用于您的目的是个好主意。