【问题标题】:How to use thread when button click event in windows form?windows窗体中的按钮单击事件时如何使用线程?
【发布时间】:2016-10-14 09:04:33
【问题描述】:

我正在制作 Windows 应用程序。

在我的应用中,工作流程是这样的。

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

  2. 首先比较textBox中的站点url和真实站点url是否匹配,开始分析站点并插入数据库,然后将数据以windows窗体显示给Datagridviwe。

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

所以我想添加一个进度条并显示它,使用线程还是backgroundworker?

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

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

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

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

【问题讨论】:

  • 你试过找教程吗?如果你只用谷歌搜索“C# Threads”,就会有很多结果。
  • 是的。我已经做到了。但正如我告诉你的,这是第一次使用它,所以我只需要一些建议如何使用它

标签: c# multithreading winforms backgroundworker


【解决方案1】:

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

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

如果您“锁定”到 .NET 3.5 或只是想了解Backgroundworker这是一个很好的机会,因为它就是为这样的场景而构建的。在后台线程上工作然后更新 UI 可能会很麻烦,使用Backgroundworker 的优点是事件(ProgressChanged、RunworkerCompleted)在 UI 线程上引发,因此会为您处理。最后,如果您选择Backgroundworker,请提供一些一般提示:

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

有关backgroundworker 的更多信息,如果您进行谷歌搜索,这里有很多好文章 :)

Thismsdn 页面包含有关您可能需要的所有后台工作人员的信息,包括示例。

【讨论】:

  • 谢谢 Bolt 和 TDull。我还需要更多的练习,但你的链接和解释真的很有帮助!!!再次感谢您的建议!! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
相关资源
最近更新 更多