none
跨线程调用,看了很多相关的问答学到了很多,但是还有些困扰 RRS feed

  • 问题

  • 首先得感谢好多人的热心回答额,让我在之间看到的问答中对如何解决跨线程调用有了一定的认识。

    但是这个问题想求助下:

    解决跨线程调用有2种方法:

    1.通过设置CheckForIllegalCrossThreadCalls = false;

    2.运用控件的Invoke方法,将所想进行的控件操作封装在一个方法中,然后用它来初始化一个委托对象来解决。

    那么这2种方法有什么区别呢?求助啊,最近正在学习网络编程&&多线程编程,好纠结额~!~~!

    感激不尽!!!


    vortex.piggy


    2012年2月13日 6:20

答案

全部回复

  • dear

    1.CheckForIllegalCrossThreadCalls = false,这是不安全的做法,当跨线程的问题越来越多时,这个方法可能会失效,不稳定。

    2.用Invoke+委派更新控件是安全且正确的做法。


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    • 已建议为答案 Neddy Ren 2012年2月16日 8:49
    • 已标记为答案 Vortex.piggy 2012年2月16日 10:06
    2012年2月13日 7:22
  • 谢谢! 那我以后还是尽量使用Invoke+委托的方法吧。

    对了,还有个问题:我最新在看多线程的时候,书上(.net 3.5高级编程)说“每一个.Net委托类型自动配备了异步调用的能力,所以不必深入研究System.Threading命名空间的细节就可以实现异步调用,虽然这些实体(Threading命名空间和委托)可以自然地联合工作”。

    这个是什么意思额...委托提供异步调用Begin,End我知道,那么异步调用的时候到底是运用Threading命名空间XXX好呢,还是直接运用委托所提供的异步调用呢。这外国书老这样说,让人感觉很纠结额,委托跟多线程之间到底有什么关系额.....

    比如我想搞一个局域网的异步聊天工具,应该怎么实现呢?

    因为自己都这里知识理解不是很到位,可能问题表述不是很清楚,请提出来额....

    多谢帮忙!


    vortex.piggy


    2012年2月13日 7:32
  • 对于书上的问题,我想您可以通过作者提供的相关资料去咨询。

    而对于多线程与委托的异步实现,请参加下面的最佳做法:

    实现基于事件的异步模式的最佳做法:
    http://msdn.microsoft.com/zh-cn/library/ms228974.aspx

    而对于一个局域网的聊天工具,通常是实现本地计算机的网络端口的监听发送。当然,监听和发送时基于异步的多线程实现的:

    http://www.codeproject.com/Articles/16916/A-Chat-Application-Using-Asynchronous-TCP-Sockets 

    感谢您的参与!


    Neddy Ren[MSFT]
    MSDN Community Support | Feedback to us

    2012年2月16日 8:49