.NET:反射器中的控制 Invoke()
因此,我重新开始一些 .NET 编程,通过 VS.NET 2010 中的一项新功能,它检测到我试图从未创建该控件的线程修改该控件的情况,并向我指出MSDN 上有一篇关于如何正确执行此操作的文章...
' HOW TO WRITE TO A FORM CONTROL FROM A THREAD THAT DIDN'T CREATE THE CONTROL
' ===========================================================================
' Say you need to write to a UI text box that logs stuff...
Delegate Sub WriteLogDelegate(ByVal [text] As String)
Private Sub WriteLog(ByVal [text] As String)
If Me.rtfLog.InvokeRequired Then
' We are not in the same thread!
' Create new WriteLogDelegate and invoke it on the same thread
Dim d As New WriteLogDelegate(AddressOf WriteLog)
Me.rtfLog.Invoke(d, New Object() {[text]})
Else
' We are totally in the same thread...
' Call AppendText like normal!
Me.rtfLog.AppendText([text])
End If
End Sub
我非常兴奋,因为我对如何执行此操作感到困惑了大约 5 年,因为以前版本的 vs.net 没有标记这一点,因为我还是一名本科生一个项目和……
嗯……抱歉。恢复了冷静。不管怎样,现在我已经了解了 .NET-fu 的一些知识,我想了解更多关于正在发生的事情以及它是如何工作的。
在哪里可以找到 .NET Reflector 中 Invoke() 的代码?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
好吧,让我们说出您的示例中发生的所有事情。
2.a.控件类是Winforms结构的一部分。
总的来说,反射器可以向您展示实现,但您可以在文章中找到想法.
如果您确定想要查看实现,只需编译一些简短的代码,如“代码诗人”答案中的代码,然后在 Reflector。(我检查了这部分,reflector 会向您显示与原始代码非常接近的内容。)
Well, let name all thing that happening in your example.
2.a. Control class is part of Winforms structure.
Overall, the reflector can show you the implementation, but the idea you can find in article.
If you shure that you want to see the implementation, just compile some short code like in "code poet" answer, and look at him in Reflector.(I check this part, the reflector will show you something that pretty close your original code.)
这应该是一个注释,但不能在注释中编码格式,所以......
如果你使用 c# 这个故事可能会变得更简单......
This should be a comment but cannot code format in comments so....
If you were using c# this story could get even simpler..
这是 MSDN 上的 Control.Invoke: http://msdn.microsoft.com/en -us/library/zyzhdc6b.aspx
Here's Control.Invoke on MSDN: http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx