多线程:子线程执行过程中调用主线程
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(); } }
以上是关于多线程:子线程执行过程中调用主线程的主要内容,如果未能解决你的问题,请参考以下文章
EventBusEventBus 源码解析 ( 事件发送 | 发布线程为 子线程 切换到 主线程 执行订阅方法的过程分析 )