我试图从委托函数中获取价值。基本上我试图从委托函数获取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时的跨线程错误弹出
第二个问题
如何在不收到任何交叉线程错误的情况下从函数中获取值。
非常感谢您的时间,并提前感谢您解决问题。
答案 0 :(得分:0)
您遇到错误,因为您尝试访问的控件是在与您访问它的线程不同的线程上创建的。在.Net中开发线程UI应用程序时,这是一个常见的错误。
有(至少)两种方法来解决你所遇到的问题,懒惰的方式和正确的方法。要以懒惰的方式解决这个问题,您只需通过在UI组件中的某处包含这行代码来停止检查对控件的非法交叉线程调用:
Control.CheckForIllegalCrossThreadCalls = False
处理问题的更好方法是确保代码在正确的线程上执行(从而保持线程安全)。一种实现此目的的方法是here。