Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
For i = 1 To 10000
Call sub_datadown()
Next
End Sub
sub_datadown()为下载子过程,下载完成就更新下载列表,提示完成更新。现在想添加一个button2,实现点击button2,取消下载,用close()的话会结束程序,但是明明没有更新完,列表却更新了,所以想用个线程来解决,求指导,网上的线程入门都看不懂,哎
------解决思路----------------------
private void button1_Click(object sender, EventArgs e)
{
Thread th = new Thread(new ThreadStart(new Action(() =>
{
for (int i = 1; i <= 1000; i++)
{
sub_datadown();
}
})));
th.Start();
}
bool _flag = true;
private void sub_datadown()
{
if (_flag)
{
//...
}
}
private void button2_Click(object sender, EventArgs e)
{
_flag = false;
}
------解决思路----------------------
private Work as boolean=true
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
For i = 1 To 10000
if Work=True then
Call sub_datadown()
else
exit sub
end if
Next
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Work=False
End Sub
------解决思路----------------------
把这个类添加到组件类内的
Imports System.Threading
Imports System.ComponentModel
Public Class Component1
Private Count1 As Integer
Private ProgressBar1 As ProgressBar
Public Property _ProgressBar1() As ProgressBar
Get
Return ProgressBar1
End Get
Set(ByVal value As ProgressBar)
ProgressBar1 = value
End Set
End Property
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim Boolean1 As Boolean
Dim Sum1 As Integer = 1
Do
' Call sub_datadown() '这里添加要运行的后台操作代码
BackgroundWorker1.ReportProgress(Sum1)
Thread.Sleep(5)
If Sum1 = Count1 Then Exit Do
Boolean1 = BackgroundWorker1.CancellationPending
e.Cancel = Boolean1
Sum1 += 1
Loop Until Boolean1
End Sub
Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
ProgressBar1.Value = e.ProgressPercentage
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
If e.Cancelled Then
MsgBox("请求的任务已被中断")
Else
MsgBox("请求的任务已完成")
End If
'这里还可以完成后的操作,更新等过程。还可以直接使用UI线程上的控件
End Sub
Public Sub MySub()
Count1 = 10000 '设置要循环的次数变量
ProgressBar1.Minimum = 1
ProgressBar1.Maximum = Count1
BackgroundWorker1.WorkerSupportsCancellation = True
BackgroundWorker1.WorkerReportsProgress = True
BackgroundWorker1.RunWorkerAsync()
End Sub
Public Sub Calcen1()
BackgroundWorker1.CancelAsync()
End Sub
End Class
'这个类是窗体的
Public Class Form1
Private Cla1 As New Component1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Cla1._ProgressBar1 = Me.ProgressBar1
Cla1.MySub()
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Cla1.Calcen1()
End Sub
End Class