vb.net - 如何使用 ThreadPool 而不每次都创建 Sub foo(o as object) ?

标签 vb.net object delegates threadpool

每次我想在 ThreadPool 中创建一个线程时,我都会创建一个愚蠢的小函数,如下面的 Worker_O。

Sub Worker(ByVal i As Integer)
    'do important stuff
End Sub

Sub Worker_O(ByVal o as Object)
    Worker(CType(o, Integer))
End Sub

Sub MakeThread()
    Dim worker1 as new Threading.WaitCallback(AddressOf Worker_O))
    Threading.ThreadPool.QueueUserWorkItem(worker1)
End Sub

VB .net中有没有一种方法可以在不创建Worker_O的情况下从Sub(i作为整数)转换为Sub(o作为对象)? Worker_O 对我来说很丑。

编辑:我正在使用 Option Explicit On,所有警告都是错误,就像一个好的程序员应该做的那样。

最佳答案

lambda 可以干净地解决这个问题:

  Sub MakeThread()
    Threading.ThreadPool.QueueUserWorkItem(Function() Worker(42))
  End Sub

  Function Worker(ByVal arg As Integer) As Integer
    ' etc...
  End Function

但是,可以调用 Sub 的 lambda 在 VS2010 之前才可用。

关于vb.net - 如何使用 ThreadPool 而不每次都创建 Sub foo(o as object) ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2216991/

相关文章:

VB.Net ".DLL was loaded, but the DllRegisterServer entry point was not found"

vb.net - 在报告中以编程方式隐藏/显示行

javascript - 如何迭代数组中的值以匹配对象中的值并返回相应的对象?

jQuery 委托(delegate)表行选择器

python - 委托(delegate)在 python

c# - 控制台应用程序中的 .NET 全局异常处理程序

wpf - 您如何将添加到 Canvas 中的用户控件放在后面的代码中

javascript - 如何使用 Node.js MongoDB 驱动程序插入 long/BigInt?

C++ 使用同名变量/对象访问命名空间中的全局变量/对象

ios - 自定义键盘 : get selected text