多线程:子线程执行过程中调用主线程

Posted sportdog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程:子线程执行过程中调用主线程相关的知识,希望对你有一定的参考价值。

直接在子线程中调用方法,线程的ID为3,通过Post则为1

 

执行结果:

2018-09-13 11:21:11:1735 : 主线程:1

2018-09-13 11:21:16:0583 : 子线程:3

2018-09-13 11:21:16:0739 : ShowForm:1发送失败!

2018-09-13 11:21:16:1051 : ShowForm:3发送失败!

 

 public class TestClass
    {

        private SynchronizationContext mainThreadSynContext;
        public void SendTestResult(string Url, string TestResult)
        {
            mainThreadSynContext = SynchronizationContext.Current; 
            Thread t = new Thread(p => Start(Url, TestResult));
            t.Start();
            LogWriteUtility.Instance.LogWrite("主线程:"+Thread.CurrentThread.ManagedThreadId.ToString());
        }

       
        private void Start(string url, string testResult)
        {
            try
            {
                Thread.Sleep(TimeSpan.FromSeconds(5));
                LogWriteUtility.Instance.LogWrite("子线程:" + Thread.CurrentThread.ManagedThreadId.ToString());
                throw new Exception("发送失败!");
            }
            catch (Exception ex)
            {
                //SendOrPostCallback myDelegate;
                //myDelegate = new SendOrPostCallback(ShowForm);
                mainThreadSynContext.Post(ShowForm, ex);
                this.ShowForm(ex);
            }
        }

        private void ShowForm(object state)
        {
            Exception ex = state as Exception;
            LogWriteUtility.Instance.LogWrite("ShowForm:" + Thread.CurrentThread.ManagedThreadId.ToString()+ex.Message);
            //ErrorForm form = new ErrorForm();
            //form.ShowDialog();
        }
    }

 

以上是关于多线程:子线程执行过程中调用主线程的主要内容,如果未能解决你的问题,请参考以下文章

java 子线程 回调 主线程

多线程实现udp网络通信

Java多线程:

EventBusEventBus 源码解析 ( 事件发送 | 发布线程为 子线程 切换到 主线程 执行订阅方法的过程分析 )

C++11多线程中的detach()join()joinable()

day006-多线程