遇到任务和代表的奇怪问题。有问题的代码在 dotNET 4.5.1、VS2013 下运行。在表单的代码中,我有一个更新网格的子程序,它检查是否需要调用,如果需要,它会调用委托。当在同一模块中调用的任务运行时,它按预期工作,没有问题。无论是否线程化,网格都会正确更新。
但是,如果从另一个模块调用相同的东西,则永远不会调用委托,并且不会更新可视组件。只是一个淡化的伪代码来澄清..
在表单的模块中:
Private Delegate Sub DoWhateverDelegate(ByVal _____)
Public Sub DoWhatever(ByVal _____)
If MyComponent.InvokeReqired
Dim Delegated As New DoWhateverDelegate(AddressOf DoWhatever)
Debug.Print("The delegate fired")
Invoke(Delegated, _____)
Else
' .. carry on as usual ..
End If
End Sub
别处....
Task.Run(Sub()
' .. various things I'd rather not block the UI thread with ..
DoWhatever()
End Sub)
工作正常。我可以执行调用 DoWhatever 的 Task.Run_ _,这一切都很愉快和美好。但是,如果我在另一个模块中创建任务并调用 DoWhatever,它不会触发委托并且该可视组件不会更新。代码是相同的,在同一个模块中有效,在另一个模块中无效。
我可能遗漏了一些明显的东西..有人愿意指出我的错误吗?谢谢。
编辑——只是为了澄清,其他模块只是代码,整个解决方案中只有一种形式。它是在程序启动时自动创建的,没有其他表单创建正在进行。