如何使用线程时,按钮单击事件在windows窗体
本文关键字:事件 windows 窗体 单击 按钮 何使用 线程 | 更新日期: 2023-09-27 18:12:59
我正在制作windows应用程序。
在我的应用程序中,工作流程如下:
-
在文本框中写入目标站点的url,并单击"开始"按钮。
-
首先将文本框中的站点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
}
}
你很难决定该如何处理这个问题。如果您正在使用。net 4.5,您可以查看async
和await
关键字。视频教程:
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页面有关于后台工作器的所有信息,你可能需要包括示例。