• 技术文章 >后端开发 >C#.Net教程

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

    巴扎黑巴扎黑2016-12-20 14:41:14原创441
    在写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的定义。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:C++ 判断本机是否有.Net环境 下一篇:避免六个常见的开发错误
    Web大前端开发直播班

    相关文章推荐

    • 一文聊聊C语言中的字符串操作(大小写转换、比较、排序等)• 分享一道逻辑面试题,看看你能答对吗!• SUNWEN教程之----C#进阶(九)• .NET异步编程总结----四种实现模式代码总结

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网