注意到 System.Threading.ExecutionContext这个类网上也找了,MSDN的例子也看了,还是不知到  它的具体用处是什么?MSDN上的例子说明其一般是这样用的:...
ExecutionContext.Run(ExecutionContext.Captcher(),(o)=>{/*...*/},null);         //.... A处若A处在 主线程 中那么这个东西 没什么特别的若把它放到 辅助线程中,那么 与不放它是一下的也起不到效果
如下所示:var  v=ExecutionContext.Captcher();
Thread t=new Thread(()=>{
  ExecutionContext.Run(v,(o)=>{/*.B.*/},null); //若想在B 处 操作UI 控件 一样 报错 不行
});
t.Start();//现在我就想知到 这个ExecutionContext 直译为执行上下文 对象怎么个用法... 

解决方案 »

  1.   

    线程中, 请用 某Control的invoke方法来处理UI级函数.....
      

  2.   

    Control.Invoke这个 有什么好说的, ...现在说的是 ExecutionContext对象
      

  3.   

    MSDN中的说明:ExecutionContext类为与执行的逻辑线程相关的所有信息提供单个容器。这包括安全上下文、调用上下文、同步上下文、本地化上下文和事务上下文。
    换句话说,一个ExecutionContext对象描述一个逻辑线程。在一个线程中,可以使用多个ExecutionContext对象实现多任务,这种多任务与多线程类似,差别主要在于多线程是由系统调度,在多处理器环境下可以同时运行,而这种方式需要自己调度,同一时刻只能运行一个任务。
      

  4.   

    谢谢楼上 cnzdgs 能不能举个例子...
      

  5.   

    你的B处并非主线程,所以你在B处使用ExecutionContext一样不可以直接操作主线程上的UI控件,必须使用invoke委托主线程来执行。
      

  6.   

    ExecutionContext 并非执行多线程用的,而是记录当前线程执行上下文用的,你可以把这个上下文传递给其它线程,但必须用 ExecutionContext 的副本,不能直接传递。
    至于它的作用,包括安全上下文、调用上下文和同步上下文。好比局域网访问其它人的电脑,如果用户名密码和你本机登录的一致,就不需要你输入用户名密码访问了(排除匿名访问),这时就是用了安全上下文自动做到了其它计算机的访问。
      

  7.   

    做以下2个测试:不用执行上下文:
    Thread t=new Thread(()=>{ 
      SynchronizationContext.Current.Post((c)=>{操作控件},null);
    }); 
    t.Start(); 使用执行上下文:
    var  v=ExecutionContext.Captcher(); 
    Thread t=new Thread(()=>{ 
      ExecutionContext.Run(v,(o)=>{SynchronizationContext.Current.Post((c)=>{操作控件},null);},null);  
    }); 
    t.Start(); 
    看看有什么区别。
      

  8.   

    应该还要在线程最开始创建新的同步上下文,否则应该没区别:
    SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
      

  9.   


    后一个没看懂象是多此一举,说半天就是没明白Run所能带来的 作用... 我觉得Run应该象SynchronizationContext.Current.Post,有跨线程的作用,就是把当前主线程的上下文传给 创建线程时
    可以保证创建线程正确的使用 (比如类级别的变量)主线程中的资源,(上下文).