如何使用线程时,按钮单击事件在windows窗体

本文关键字:事件 windows 窗体 单击 按钮 何使用 线程 | 更新日期: 2023-09-27 18:12:59

我正在制作windows应用程序。

在我的应用程序中,工作流程如下:

  1. 在文本框中写入目标站点的url,并单击"开始"按钮。

  2. 首先将文本框中的站点url与实际站点url进行比较,如果匹配,开始分析站点并插入数据库,然后将数据以windows形式显示给Datagridviwe。

但问题是……当站点信息很大时,有时Windows窗体会冻结。但是效果很好....

所以我想添加一个进度条并显示它,使用线程或后台工作者?

但我从来没有使用线程或类似的…我一点儿也不知道……

请有人帮助我或给一些建议....

我的代码是这样的(简化)

public partial class Site_Statistics : MetroFramework.Forms.MetroForm
{
    public Site_Statistics()
    {
        InitializeComponent();                        
    }
    private void Migration_Statistics_Load(object sender, EventArgs e)
    {
    }
    private void mtbtnStart_Click(object sender, EventArgs e)
    {            
        insertWebApplicationInfo();
        SelectWebApplicationInfo();
    }
    private void insertWebApplicationInfo()
    {
        //Insert to database works here
    }
    private void SelectWebApplicationInfo()
    {
         //Select from database works here
    }
}

如何使用线程时,按钮单击事件在windows窗体

你很难决定该如何处理这个问题。如果您正在使用。net 4.5,您可以查看asyncawait关键字。视频教程:

https://www.youtube.com/watch?v=MCW_eJA2FeY

如果你被"锁定"到。net 3.5或者只是想了解Backgroundworker,这是一个很好的机会,因为它就是为这样的场景而构建的。在后台线程上做工作,然后更新UI可能是一个麻烦,使用Backgroundworker的优点是事件(ProgressChanged, RunworkerCompleted)在UI线程上被提出,所以这是为你照顾的。最后一些通用的技巧,如果你去Backgroundworker:

  • 您希望执行的任务被放置在DoWork事件
  • Do not在DoWork事件中更新UI,这是在backgroundworker
  • 引发的事件中完成的
  • 如果要报告进度,请记住设置WorkerReportsProgress属性并在doWork事件中报告进度
  • 如果您希望能够取消任务,请记住设置WorkerSupportsCancellation属性并在doWork事件中处理取消

关于backgroundworker的更多信息,如果你在谷歌上搜索一下,有很多很好的文章:)

这个msdn页面有关于后台工作器的所有信息,你可能需要包括示例。