0

我正在尝试从委托函数中获取价值。基本上我试图从委托函数中获取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)”时

调试时弹出跨线程错误

第二个问题

如何从函数中获取值而不会出现任何跨线程错误。

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

4

1 回答 1

0

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

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

Control.CheckForIllegalCrossThreadCalls = False

处理该问题的更好方法是确保您的代码在正确的线程上执行(从而保持线程安全)。此处描述了一种完成此操作的方法。

于 2013-08-01T13:26:18.090 回答