C#多线程下, 子线程如何让主线程执行方法

重现一下当时我的需求:

我开了多个线程, 来监视一个变量, 然后去执行一些方法.

看起来没什么毛病, 但是运行起来会报错
此对象被其他线程占用
一开始想着可能是冲突了加入了

lock(a)
{someFunction();
}

是不太行的, 发现是主线程占用了, 也就引出了今天的.

如何让主线程去执行

如果是UI子类的话

因为UI一般也就是继承自DispatcherObject, 所以直接获取他的Dispatcher就行

bt1.Dispatcher.Invoke(()=>{someFunction();
});

关于DispatcherObject可以参考

其他情况

可以使用SynchronizationContext.Current来获取当前线程的同步上下文

SynchronizationContext.Current.Send((e)=>
{someFunction();
},null);

这个方法也并不是所有情况都可以, 官方文档已经明确给出了

在 Windows Store 应用程序中调用的方法。 用于 Windows Store 应用程序的 SynchronizationContext 的实现应用不支持 Send(SendOrPostCallback, Object) 方法。

详细的SynchronizationContext资料

注意了, Current可能为null

其他情况

使用Application.Current来获取当前的Application, 然后调用他的Dispatcher

Application.Current.Dispatcher.Invoke(() =>
{someFunction();
});

Application的文档

最后

我最后是用第三个方法成功实现了.

参考

没事多看MSDN

C#多线程下, 子线程如何让主线程执行方法相关推荐

  1. DLL内线程同步主线程研究(子线程代码放到主线程执行)

    DLL内线程同步主线程研究(子线程代码放到主线程执行) 我们在实际项目中经常会用到多线程编程,比如Socket编程等,在创建的线程内同步主线程一般使用Synchronize方法实现子线程操作放到主线程 ...

  2. 【Android】子线程切回主线程的方法梳理

    [Android]子线程切回主线程的方法梳理 view.post(Runnable action) textView.post(() -> {textView.setText("更新t ...

  3. [Android] 任意时刻从子线程切换到主线程的实现

    [Android] 任意时刻从子线程切换到主线程的实现 - Android移动开发技术文章_手机开发 - 红黑联盟 转载于:https://www.cnblogs.com/melons/p/57919 ...

  4. c++ 等待子线程结束_python主线程与子线程的结束顺序

    对于程序来说,如果主进程在子进程还未结束时就已经退出,那么Linux内核会将子进程的父进程ID改为1(也就是init进程),当子进程结束后会由init进程来回收该子进程. 主线程退出后子线程的状态依赖 ...

  5. 主线程退出,子线程会退出吗?子线程崩溃,主线程会退出吗?

    记得以前刚接触多线程编程时,作为一个新手遇到的一个问题就是:我创建的子线程为什么没有跑起来?如以下最简单的一个程序: #include <stdio.h> #include <std ...

  6. java主线程控制子线程_CountDownLatch控制主线程等子线程执行完--Java多线程

    1.[代码]CountDownLatch控制主线程等子线程执行完--Java多线程 package com.sihuatech.common; import java.util.concurrent. ...

  7. android广播怎样运行在子线程,android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢?...

    抛开你这段代码不看,单根据你的标题来回答: android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢? 需要在子线程执行完成的地方,通过主线程的Handler发送一条消 ...

  8. [异步、tensorflow] - 子线程操作tensor,主线程处理tensor

    参考 整体流程如下图 代码 import tensorflow as tf"""模拟: 子线程不停的取数据放入队列中, 主线程从队列中取数据执行包含: 作用域的命名.把程 ...

  9. java主线程和子线程区别_主线程异常– Java

    java主线程和子线程区别 Being a Java Programmer, you must have seen exception in thread main sometimes while r ...

最新文章

  1. 发布我的第一个flex作品
  2. Uber无人车撞死人,安全员被控过失杀人,算法免于追责
  3. python有道翻译-Python调用有道词典翻译
  4. JavaScript实现rabin-karp算法(附完整源码)
  5. boost::hana::any_of用法的测试程序
  6. Android回调的简单理解
  7. 通过一个简单的例子,了解如何单步调试 Cypress 代码
  8. Dynamic Web Module 3.0 requires Java 1.6 or newer报错
  9. 简单的识别猫狗的模型
  10. MongoDB(三):MongoDB概念解析
  11. pytreebank︱情感分析可视化——情感结构树
  12. WPF 点击按钮打开新窗口
  13. union myun { struct{ int x; int y; int z; }u; int k; }a;
  14. 《Adobe Photoshop CS5中文版经典教程(全彩版)》目录—导读
  15. Excel如何批量生成条形码?
  16. 如何确认是文章发表在哪里?
  17. w10桌面计算机图标箭头去除,完美W10如何去除桌面图标快捷方式小箭头
  18. js如何实现拆分字符串并依次输出
  19. docker 导出本地所有镜像,带仓库和tag值导出到tar.gz文件
  20. CS61A fa2021 Composing Programs 2.8 Efficiency 效率

热门文章

  1. java 取余和取模运算之间的区别
  2. 沉浸式娱乐与区块链游戏的未来
  3. JavaScript去除字符串前两个字
  4. 治疗忧郁症的好方法 .
  5. Zhon库:Python文本处理利器!详细攻略带你玩转!
  6. adb对mumu模拟器查看游戏的log
  7. uniapp vue获取dom元素位置和高度信息
  8. 用python进行文件拷贝
  9. 用Python赚点零花钱的渠道有哪些?
  10. 什么是存货周转天数,有什么作用