如何在Windows窗体中按钮点击事件时使用线程?

时间:2016-10-14 09:04:33

标签: c# multithreading winforms backgroundworker

我正在制作Windows应用程序。

在我的申请中,工作流程就是这样。

  1. 在文本框中输入目标网站网址,然后点击开始按钮。

  2. 首先,比较textBox中的网站网址和真实网址网址(如果匹配),开始分析网站并插入数据库,然后在Windows窗体中向Datagridviwe显示数据。

  3. 但问题是......当网站信息很大时,有时窗口形式会冻结......但它运作良好......

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

    但我从不使用线程或类似的东西......我对此一无所知......

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

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

    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
        }
    }
    

1 个答案:

答案 0 :(得分:1)

很难为你做出决定,你应该如何解决这个问题。如果您使用的是.NET 4.5,则可以查看asyncawait个关键字。视频教程:

  

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

如果你被锁定"到.NET 3.5或只是想了解Backgroundworker这是一个很好的机会,因为它是为此而构建的场景。在后台线程上工作然后更新UI可能很麻烦,使用Backgroundworker的优点是在UI线程上引发了事件(ProgressChanged,RunworkerCompleted),因此这将为您解决。最后,如果您选择Backgroundworker

,请参阅一些常规提示
  • 您要执行的任务放在DoWork事件
  • 在DoWork事件中更新UI,这是在backgroundworker
  • 引发的事件中完成的
  • 如果您想报告进度,请务必设置WorkerReportsProgress属性并报告doWork活动中的进度
  • 如果您希望能够取消任务,请记住设置WorkerSupportsCancellation属性并在doWork事件中处理取消

有关backgroundworker的更多信息,如果您使用谷歌搜索,有很多好文章:)

This msdn页面包含了您可能需要的所有背景工作者信息,包括示例。