委托函数返回值

时间:2013-08-01 13:19:15

标签: vb.net function delegates

我试图从委托函数中获取价值。基本上我试图从委托函数获取richboxtext行长度。

这是我的功能

Private Delegate Function getrichlengthmain(ByVal TB As RichTextBox) As String

Private Function getrichlenghtdele(ByVal TB As RichTextBox) As string

        Return TB.Lines.Length


End Function

我正在通过

来称呼它
Dim d As getrichlengthmain

        d = AddressOf getrichlenghtdele

dim returnvalue as string

returnvalue = d.BeginInvoke(FstList,nothing,nothing)

此代码中的2个问题

第一个问题

当我将代码从“returnvalue = d.BeginInvoke(FstList,nothing,nothing)”更改为“d.BeginInvoke(FstList,nothing,nothing)”

debuiging时的跨线程错误弹出

第二个问题

如何在不收到任何交叉线程错误的情况下从函数中获取值。

非常感谢您的时间,并提前感谢您解决问题。

1 个答案:

答案 0 :(得分:0)

您遇到错误,因为您尝试访问的控件是在与您访问它的线程不同的线程上创建的。在.Net中开发线程UI应用程序时,这是一个常见的错误。

有(至少)两种方法来解决你所遇到的问题,懒惰的方式和正确的方法。要以懒惰的方式解决这个问题,您只需通过在UI组件中的某处包含这行代码来停止检查对控件的非法交叉线程调用:

Control.CheckForIllegalCrossThreadCalls = False

处理问题的更好方法是确保代码在正确的线程上执行(从而保持线程安全)。一种实现此目的的方法是here