加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 从特定线程调用方法

发布时间:2020-12-15 08:18:44 所属栏目:百科 来源:网络整理
导读:我如何在调用SomeAsyncMethod的同一线程上调用onCompleteCallBack方法? public void SomeAsycMethod ( Actionobject onCompleteCallBack ){ // get the current thread /* var ThisThread = Thread.CurrentThread. */ Task.Factory.StartNew( () = { Thread
我如何在调用SomeAsyncMethod的同一线程上调用onCompleteCallBack方法?
public void SomeAsycMethod ( Action<object> onCompleteCallBack )
{
    // get the current thread 
    /* var ThisThread = Thread.CurrentThread. */

    Task.Factory.StartNew( () =>
    {
        Thread.Sleep( 1000 );// do some work;

        // lastly call the onCompleteCallBack on 'ThisThread'
        onCompleteCallBack( "some result" );

        // I am looking for something like:
        /* ThisThread.Invoke("some result"); */
    });
}

解决方法

虽然你不能保证你会在同一个线程上调用回调,但你可以保证它将在同一个 Synchronization Context中被调用(假设原始调用中存在一个).
public void SomeAsycMethod ( Action<object> onCompleteCallBack )
{
    // get the current context
    var context = SynchronizationContext.Current;

    Task.Factory.StartNew( () =>
    {
        Thread.Sleep( 1000 );// do some work;

        // lastly call the onCompleteCallBack on 'ThisThread'
        onCompleteCallBack( "some result" );

        // I am looking for something like:
        context.Post(s => onCompleteCallBack ("some result"),null); 
    });
}

例如,在Windows窗体或WPF程序中,上面将确保在GUI线程上调用回调(相应地通过消息循环或调度程序).类似于ASP.NET上下文.

话虽如此,我同意Justin Harvey的回复任务< T>可能会是一个更好的设计.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读