十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
给你个多线程执行任务的例子
峨眉山网站建设公司创新互联,峨眉山网站设计制作,有大型网站制作公司丰富经验。已为峨眉山近1000家提供企业网站建设服务。企业网站搭建\成都外贸网站建设公司要多少钱,请找那个售后服务好的峨眉山做网站的公司定做!
先添加BackgroundWorker1、TextBox1、Button1,都是标准控件(窗体)在工具箱中找
vb.net2008
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
BackgroundWorker1.WorkerReportsProgress = True '可以传值
BackgroundWorker1.WorkerSupportsCancellation = True '可以暂停
TextBox1.Text = "开始多任务"
Button1.Text = "0"
BackgroundWorker1.RunWorkerAsync() '调用多任务程序
End Sub
'多任务程序
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
System.Threading.Thread.Sleep(20000) '暂停时间,可以是你的非常耗时程序任务
BackgroundWorker1.ReportProgress(100) '传出0-100数值
End Sub
'接收传出数值
Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
'TextBox1.Text = e.ProgressPercentage
TextBox1.Text = "结束多任务"
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Button1.Text += 1
End Sub
End Class
在启动程序后可以不停点击Button1看到数值的增加而不会卡死,20秒后TextBox1就会改成"结束多任务",实际上看你的程序是什么了,传值和接收传出数值的部分可取消
一、退出本次循环:
用goto语句处理,例如:
For i = 0 To 10
If i Mod 2 = 0 Then GoTo e
.....
....
e:
Next i
二、退出整个for循环用:exit for
扩展资料:
注意事项
常见的for循环一般是一下代码这种结构:
for (int i = 0; i 100; i++)
{
Console.WriteLine(i);
}
或者递减的:
for (int i = 100; i 0 ; i--)
{
Console.WriteLine(i);
}
但for当然不止这样一种用法。for的定义,()内的三段表达式,除了中间的必须产生布尔型,并未对其余两段有所限制,只要是表达式就可以了。在Lucene.Net中就有好几次这样的用法。例如:
for (Token token = input.Next(result); token != null; token = input.Next(result))
{
int len = token.TermText().Length;
if (len = min len = max)
{
return token;
}
}
简单的办法可以试试赋值后加
控件.refresh +
System.Windows.Forms.Application.DoEvents()
或者
My.Application.DoEvents()
复杂的方法就是用后台线程循环,并更新界面
要弄清楚这两个问题,就要明白For循环语句的语法规则:
For循环语句,首先是判断循环条件,如果循环条件不合理,则循环不执行。
那么看第一个语句,循环范围是 i = -3.5 to 5.5,显然这个是一个从-3.5到5.5的递增范围,可是后面的Step却是一个负数,表示以0.5的步长递减。取值范围要求从小到大,可是步长改变却是由大变小,显然这个循环条件自相矛盾,所以循环将不会执行,也就是循环执行的次数是0次!
如果循环条件合理,则开始执行循环语句,直到根据步长变换,下一个值超出循环范围则终止。
For j = 6 to 2 Step -2
Next
完整写法就是:
For j = 6 to 2 Step -2
Next j
Next j的意思就是下一个j值。结合本题,下一个j值等于6-2=4,这个时候,就是循环语句的第二个规则,判断循环变量的值是否超出循环范围,我们这里的j=4,显然是在6 to 2这个范围之内,所以循环继续,到下一个j的时候为2,依然在循环范围内;到这里,6,4,2我们的循环执行了3次,准备第4次循环的时候j = 2 -2 = 0超过了6 to 2这个范围,那么循环终止。
所以i循环内的每一个j循环将执行3次。
文字写在label的caption属性中,调用timer()函数
附上我写的左右往复运动代码,实现image1在picture1中左右往复运动
Private
Sub
Timer1_Timer()
If
Image1.Left
=
Picture1.ScaleWidth
-
Image1.Width
Then
k
=
1
If
k
=
1
Then
Image1.Left
=
Image1.Left
-
50
Else
Image1.Left
=
Image1.Left
+
50
End
If
If
Image1.Left
=
Then
k
=
End
Sub
值传递和地址传递(引用)的而导致的问题。
在For Each 的时候
当对象是值对象的时候,等于获得到一个副本。
当对象是引用对象的时候,则是获得到一个指针。
而在For To 的时候
无论对象是什么,你都获得到这个集合指定位置的指针。
更详细的,可以请参考以下内容,或直接去官方的MSDN了解
关于值类型和引用类型:
如果数据类型在它自己的内存分配中存储数据,则该数据类型就是“值类型”。“引用类型”包含指向存储数据的其他内存位置的指针。
值类型
值类型包括:
所有数字数据类型
Boolean、Char 和 Date
所有结构,即使其成员是引用类型
枚举,因为其基础类型总是 SByte、Short、Integer、Long、Byte、UShort、UInteger
或 ULong
引用类型
引用类型包括:
String
所有数组,即使其元素是值类型
类类型,如 Form
委托
非类型的元素
以下编程元素未限定为类型,因为您无法将它们中的任何一个指定为声明元素的数据类型:
命名空间
模块
事件
属性和过程
变量、常数和字段
使用对象数据类型
可以将引用类型或值类型指派给 Object 数据类型的变量。Object
变量总是存储指向数据的指针,从不存储数据本身。然而,如果将值类型指派给 Object 变量,则 Object
变量将表现得像存储自己的数据一样。有关更多信息,请参见 Object 数据类型。
通过将 Object 变量传递给 Microsoft.VisualBasic
命名空间中 Information
类的 IsReference
方法,可以确定该变量是用作引用类型还是值类型。如果 Object 变量的内容表示引用类型,则 Information.IsReference 返回 True。