.net编程时在线程里使用Form上的控件的问题

在写vb.net时,遇到要在线程里改变form上的listview控件中的信息,动手做起来才发现并不是那么容易。因为微软的框架并不鼓励在线程里直接访问form上的控件。因为这样会改变ui进程的正常执行。如果必须这样做,需要在线程中使用invoke函数或者invokebegin函数。下面是一个例子:

Imports System.Threading

Public Class Form1
Delegate Sub AddListItem(ByVal IPString As String, ByVal ScanPort As Integer)
Public myDelegate As AddListItem
Public OpenPortCount As Integer = 0

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
myDelegate = New AddListItem(AddressOf AddListItemMethod)
End Sub

Private Sub Start_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Start_Button.Click
Dim mythread As Thread
mythread = New Thread(New ThreadStart(AddressOf ThreadFunction))
mythread.Start()

End Sub

Private Sub ThreadFunction()
Dim mythread As Thread
mythread = New Thread(New ThreadStart(AddressOf DoScanThread))
mythread.Start()
End Sub ‘ThreadFunction

Private Sub DoScanThread()
Dim myThreadClassObject As New ScanThreadClass(Me)
myThreadClassObject.run()
End Sub

Public Sub AddListItemMethod(ByVal IPString As String, ByVal scanport As Integer)
ListView_Result.Items.Add(IPString, OpenPortCount) ‘ScanIP.ToString(), 0)
ListView_Result.Items(OpenPortCount).SubItems.Add(scanport.ToString())
OpenPortCount += 1
End Sub ‘AddListItemMethod

End Class

Public Class ScanThreadClass
Private myFormControl1 As Form1

Public Sub New(ByVal myForm As Form1)
myFormControl1 = myForm
End Sub ‘New

Public Sub run()
myFormControl1.Invoke(myFormControl1.myDelegate, New Object() {“11”, 123})
End Sub

End Class

主要注意的就是Invoke的调用和Delegate的定义。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2553942.html

(0)
上一篇 2025年3月6日 06:53:21
下一篇 2025年3月6日 06:53:29

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 避免六个常见的开发错误

    tony patton 在zdnet上发了篇文章,题目叫《避免六个常见的开发错误》,读了觉得不错,缩了一下贴出来。 1.认为必须要用Visual Studio.NET来开发.NET应用 你只需安装可在微软网站上免费下载的.NET框架即可。 …

    编程技术 2025年3月6日
    200
  • Symbian 关于字符编码转换

    字符串编码中文表示常用的有:gb2312,gbk,unicode,utf-8 其中gbk是gb2312的超集,也就是涵盖了gb2312编码的所有内容, utf-8是unicode的在网络传输中的一种编码格式, 如果我们使用vc做为开发工具,…

    编程技术 2025年3月6日
    200
  • android 单选(RadioGroup )复选(CheckBox)按钮的应用

    第一步,还是创建android项目。 第二步,修改已经生成的res/layout/main.xml   view plaincopy to clipboardprint?        android:orientation=”…

    编程技术 2025年3月6日
    200
  • ASP.net的AJAX

    这两天培训的.net framework让我对微软的东西有了进一步的了解。以前只是认为ms的东西就是拖来拖去的,并没有其他让人更惊喜的功能。今天介绍了asp ajax toolkit以后,真是让人大跌眼镜。 举些简单的例子,比如说要加一个这…

    编程技术 2025年3月6日
    200
  • 模拟spring功能

    1、建立user.java,内容如下: package net.model;/** * @项目名:spring2.5 * @包名:net.model * @文件名:User.java * @日期:Jun 22, 2011 4:31:22 P…

    编程技术 2025年3月6日
    200
  • hibernate中多对多关系映射

    案例: person:一个人可以有担任很多项工作 job:一项工作可以由很多人担任 这在person和job中就形成了多对多的关系,映射成一张新表。 package com.pk.mapping;import java.util.HashS…

    编程技术 2025年3月6日
    200
  • String StringBuffer StringBuilder区别

    string 字符串常量 stringbuffer 字符串变量(线程安全) stringbuilder 字符串变量(非线程安全) 简要的说, string 类型和 stringbuffer 类型的主要性能区别其实在于 string 是不可变…

    编程技术 2025年3月6日
    200
  • ASP.NET session时间的设置

    asp.net session时间的设置 方法一:  asp.net session的默认时间设置是20分钟,即超过20分钟后,服务器会自动放弃session信息. 当我们在asp.net程序中打开webconfig的时候,可以看到一段如下…

    编程技术 2025年3月6日
    200
  • asp.net禁用按钮以防止重复提交

    方法一:  只在按钮前台代码中增加onclientclick=”this.disabled=true;” usesubmitbehavior=”false”即可。  方法二: protecte…

    编程技术 2025年3月6日
    200
  • asp.net默认回车按钮的设置

    其实一早就有接触过在asp.net的页面上如何设置默认的回车按钮,只是当时没有记录下来。今天再次碰上,翻资料找不到,按照网上的办法也解决不了,那叫一痛苦。          网上的办法相信大家都知道。无非都是在aspx页面上设置如下js代码…

    编程技术 2025年3月6日
    200

发表回复

登录后才能评论