C#多线程下, 子线程如何让主线程执行方法
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#多线程下, 子线程如何让主线程执行方法相关推荐
- DLL内线程同步主线程研究(子线程代码放到主线程执行)
DLL内线程同步主线程研究(子线程代码放到主线程执行) 我们在实际项目中经常会用到多线程编程,比如Socket编程等,在创建的线程内同步主线程一般使用Synchronize方法实现子线程操作放到主线程 ...
- 【Android】子线程切回主线程的方法梳理
[Android]子线程切回主线程的方法梳理 view.post(Runnable action) textView.post(() -> {textView.setText("更新t ...
- [Android] 任意时刻从子线程切换到主线程的实现
[Android] 任意时刻从子线程切换到主线程的实现 - Android移动开发技术文章_手机开发 - 红黑联盟 转载于:https://www.cnblogs.com/melons/p/57919 ...
- c++ 等待子线程结束_python主线程与子线程的结束顺序
对于程序来说,如果主进程在子进程还未结束时就已经退出,那么Linux内核会将子进程的父进程ID改为1(也就是init进程),当子进程结束后会由init进程来回收该子进程. 主线程退出后子线程的状态依赖 ...
- 主线程退出,子线程会退出吗?子线程崩溃,主线程会退出吗?
记得以前刚接触多线程编程时,作为一个新手遇到的一个问题就是:我创建的子线程为什么没有跑起来?如以下最简单的一个程序: #include <stdio.h> #include <std ...
- java主线程控制子线程_CountDownLatch控制主线程等子线程执行完--Java多线程
1.[代码]CountDownLatch控制主线程等子线程执行完--Java多线程 package com.sihuatech.common; import java.util.concurrent. ...
- android广播怎样运行在子线程,android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢?...
抛开你这段代码不看,单根据你的标题来回答: android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢? 需要在子线程执行完成的地方,通过主线程的Handler发送一条消 ...
- [异步、tensorflow] - 子线程操作tensor,主线程处理tensor
参考 整体流程如下图 代码 import tensorflow as tf"""模拟: 子线程不停的取数据放入队列中, 主线程从队列中取数据执行包含: 作用域的命名.把程 ...
- java主线程和子线程区别_主线程异常– Java
java主线程和子线程区别 Being a Java Programmer, you must have seen exception in thread main sometimes while r ...
最新文章
- 发布我的第一个flex作品
- Uber无人车撞死人,安全员被控过失杀人,算法免于追责
- python有道翻译-Python调用有道词典翻译
- JavaScript实现rabin-karp算法(附完整源码)
- boost::hana::any_of用法的测试程序
- Android回调的简单理解
- 通过一个简单的例子,了解如何单步调试 Cypress 代码
- Dynamic Web Module 3.0 requires Java 1.6 or newer报错
- 简单的识别猫狗的模型
- MongoDB(三):MongoDB概念解析
- pytreebank︱情感分析可视化——情感结构树
- WPF 点击按钮打开新窗口
- union myun { struct{ 	int x; 	int y; 	int z; }u; int k; }a;
- 《Adobe Photoshop CS5中文版经典教程(全彩版)》目录—导读
- Excel如何批量生成条形码?
- 如何确认是文章发表在哪里?
- w10桌面计算机图标箭头去除,完美W10如何去除桌面图标快捷方式小箭头
- js如何实现拆分字符串并依次输出
- docker 导出本地所有镜像,带仓库和tag值导出到tar.gz文件
- CS61A fa2021 Composing Programs 2.8 Efficiency 效率