首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

线程调用UI线程的方法

vs2005中,子线程不允许使用UI中的控件,网上的解决方法都有:使用控件的Invoke,不过在我自己的应用中总觉得麻烦:我要从子线程中调用一个主线程中的处理,要用一次委托,而Invoke还要用委托,...我稍微改了一下结构,可以比较方便的达到在子线程中调用UI线程中的处理函数。...在线程类中,定义 public delegate void ReceivedHandlerUI(object obj);     //接收处理,涉及UI 使用两个变量,第二个只要是界面中的任意控件都行,...主要是利用它回到UI线程 public ReceivedHandlerUI OnReceivedUI;  //接收处理函数,涉及UI public System.Windows.Forms.Control...同时,由于是在UI线程中执行,所以操作控件时也不用考虑并发性线程安全之类的。

1.1K80
您找到你想要的搜索结果了吗?
是的
没有找到

线程UI线程的通信(委托)

由于项目中存在这样的载入的画面:在界面上有显示载入信息的Label控件和进度条,如果采用单线程则在载入数据的时候UI界面会被锁死,造成假死的感觉。...为了给一个更友好的界面,因此有必要引入多线程技术,使得软件更加“人性化”。 但随后在子线程中访问界面上的控件的时候会出现异常,不能操作主线程所控制的UI界面。看来这得用到委托技术了!...定义线程: ThreadStart ts = new ThreadStart(Downin); //括号里面的参数是一个方法名,表示线程要处理的方法 Thread mythread = new...Thread(ts); mythread.Start(); //线程开始运作 以上三行是线程操作的核心内容,不熟悉线程定义和执行原理等的园友请参考《C#线程参考手册》!...本文只是抛砖引玉,可以了解一下线程和委托的好处。当然,线程并不是越多越好,否则只会增加系统开销,应该看实际需要来应用。 注:如有疏漏之处请指教,谢谢。

58220

浅谈JS线程

说是为了避免复杂性,所以JavaScript从诞生就是单线程,将来也不会改变。 因为是单线程,我们开发的时候经常是有一个方法报错了,那么下面的方法也不会执行,这就是单线程。...但是浏览器却又允许多线程执行。 虽然JavaScript是单线程,但是是有子线程存在的。 所以主线程下就会产生一个任务队列,相当于分为了两个任务,一个是同步任务,一个是异步任务。...异步任务,也就是任务队列会先执行,有了结果就会返回一个事件,等待主线程读取。当主线程的同步执行完毕,就是主线程空了,那么就会读取任务队列。...while方法,主线程一直死循环,也就没办法执行完毕,那么下一个任务队列的线程就无法执行到。...由于线程机制使用不多,还无法准确理解,只能先写写自己最简单的理解。线程的内容还很多,有轮询、队列、浏览器的线程,这些都是需要一定的理解。

73520

Android子线程更新UI线程方法之Handler

我们开发应用程序的时候,处于线程安全的原因子线程通常是不能直接更新主线程UI线程)中的UI元素的,那么在Android开发中有几种方法解决这个问题,其中方法之一就是利用Handler处理的。...如何来用~~ Handler是这么定义:主要接受子线程发送的数据, 并用此数据配合主线程更新UI....这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,Android主线程线程不安全的,更新UI只能在主线程中更新.。...(子线程用sedMessage()方法传弟)Message对象,(里面包含数据) , 把这些消息放入主线程队列中,配合主线程进行更新UI。...在里面还有个handler对象,这又涉及到了跨线程修改UI元素内容的问题。在java中是不允许跨线程修改UI元素的,如我们在新启动的线程中想去修改UI线程中TextView的文本时,会报错误的。

2.1K90

彻底明白JS线程

我们都知道JS是单线程的,即js的代码只能在一个线程上运行,也就说,js同时只能执行一个js任务,但是为什么要这样呢?这与浏览器的用途有关,JS的主要用途是与用户互动和操作DOM。...设想一段JS代码,分发到两个并行互不相关的线程上运行,一个线程在DOM上添加内容,另一个线程在删除DOM,那么会发生什么?以哪个为准?所以为了避免复杂性,JS从一开始就是单线程的,以后也不会变。...浏览器 既然JS是单线程的,那么诸如onclick回调,setTimeout,Ajax这些都是怎么实现的呢?...是因为浏览器或node(宿主环境)是多线程的,即浏览器搞了几个其他线程去辅助JS线程的运行。...类别B: JS 引擎线程,我们把它称为 主线程 ,它是干嘛的?

1.1K40

WPF 跨线程 UI 的方法

本文告诉大家如何在 WPF 使用多线程UI 的方法 在很多的时候都是使用单线程UI 但是有时候需要做到一个线程完全处理一个耗时的界面就需要将这个线程作为另一个 UI 线程 在 WPF 可以使用...VisualTarget 做到多个 UI 线程的绘制,注意这里的 WPF 的渲染线程只有一个,多个 UI 线程无法让渲染的速度加快。...如果一个界面有很多的 Visual 那么渲染速度也不会因为添加 UI 线程用的时间比原来少 在 WPF 的 VisualTarget 可以用来连接多个不同的线程UI 元素,在使用的时候只需要创建,然后在另一个...UI 线程将创建的元素添加到 RootVisual 就可以 var thread = new Thread(() => {...UI 线程,创建一个 UI 线程的最简单方法是运行 Dispatcher.Run() 和设置线程 STA 才可以,注意这里的 Dispatcher 是静态类 var thread

1.7K30

浏览器的UI线程

所有用于更新用户界面的操作都是由浏览器的UI线程来完成 UI线程维护一个队列,把每个要更新UI的操作都做为一个任务添加到队列中,然后等UI线程空闲时再按顺序进行处理 示例 <button onclick...document.createElement("div"); div.innerHTML = "test"; document.body.appendChild(div); } 当用户点击按钮时,会触发UI...线程来创建两个任务,并添加到队列中, 第一个任务是更新按钮的点击状态样式,是浏览器默认的操作 第二个任务是执行 doClick() UI线程空闲下来后,先从队列中取出第一个任务来执行,完成后,再取出第二个任务...,doClick()中需要创建一个元素并添加到body,这也是一个更新UI的操作,UI线程会再创建一个任务并添加到队列中,然后在UI线程空闲后再次从队列中取出任务来执行 ?

53570

线程与更新UI,细谈原理

进入正题,大家应该都听过这样一句话——“UI更新要在主线程,子线程更新UI会崩溃”。久而久之就感觉这是个真理,甚至被认为是“官方结论”。 但是如果问你,官方什么时候在哪里说过这句话,你会不会有点懵。...废话有点多了,今天还是通过实践案例,看看这个关于线程UI更新的 “官方结论” 正确吗?...检查线程,其实就是检查更新UI操作的当前线程是不是当初创建UI的那个线程,这样就保证了线程安全,因为UI控件本身不是线程安全的,但是加锁又显得太重,会降低View加载效率,毕竟是跟交互相关的。...总结 任何线程都可以更新UI,也都有更新UI导致崩溃的可能。...其中的关键就是view被绘制到界面时候的线程(也就是最顶层ViewRootImpl被创建时候的线程)和进行UI更新时候的线程是不是同一个线程,如果不是就会报错。

76320

Android NDK中的UI线程

概述 在Android中,UI线程是一个很重要的概念。我们对UI的更新和一些系统行为,都必须在UI线程(主线程)中进行调用。...在Linux中是没有主线程这一概念的。 那么,如果我们在子线程调用了一个native方法,在C++的代码中,我们想要切换到主线程调用某个方法时,该如何切换线程呢?...只是在调用之前,做了线程的转换,在C++层的主线程调用了toast。...通过初始中的这样两个方法,我们就构建了一条通往主线程的通道。 发往主线程 在初始化的方法中,我们构筑了一条消息通道。接下来,我们就需要将消息发送至主线程。...这样,我们只需要在子线程中,以一定的编码格式向主线程发送消息,即可完成在native中切换主线程的能力。 --- 如有问题,欢迎指正。

2.3K40

线程能否操作UI控件

前言 这是一个初级Android工程师面试问题,一般标准答案:子线程不能操作UI控件。 那我为什么还要问这个弱智的问题呢? 因为我心目中的标准答案:子线程不能操作"参与绘制"的UI控件。...“操作UI”理解成“调用View.invalidate()”。 问题也就变成了:子线程能否调用View.invalidate()。...Thread.currentThread不等于mThread(主线程/UI线程),也就是子线程。...四、什么是参与绘制 看完上面的内容,肯定有人说答案不就是子线程不能操作UI控件嘛,为什么还要加上"参与绘制"的条件。...以上情况就是属于“不参与绘制”的情况 总结 现在应该理解我的标准答案:子线程不能操作"参与绘制"的UI控件。

71110

2019-1-29-多线程UI的多线程问题

我们都知道我们都知道WPF是一个单UI线程的应用模型 ---- 但是实际上我们可以通过在后台线程跑一个Dispatcher来运行UI元素 详情可以参见这个大大的博客Launching a WPF Window...整个方法中只有一个foreach循环,那么显然这是一个多线程问题 ?..._themeHelper作为一个backing field只有一处赋值,而且ThemeKnownTypeHelpers属性不是线程安全的,所以应该是存在2种可能性: 1、循环的时候其他线程对该属性赋值...2、2个线程同时访问ThemeKnownTypeHelpers属性 我们跟踪下代码Application.LoadComponent调用了静态方法XamlReader.LoadBaml 这个方法中创建了...这是一个线程安全的Lazy构造的WpfSharedBamlSchemaContext。 所以所有线程都会访问同一个WpfSharedBamlSchemaContext ? ? ?

77830

win10 uwp 非ui线程访问 ui

大家都知道,不可以在 其他线程访问 UI 线程,访问 UI 线程包括给 依赖属性设置值、读取依赖属性、调用方法(如果方法里面修改了依赖属性)等。...一旦访问UI线程,那么就会报错,为了解决这个问题,需要使用本文的方法,让后台线程访问 UI 线程。...本文提供三个方法可以让其他线程访问 UI 线程 第一个方法是比较不推荐使用的,可能出现 win10 uwp Window.Current.Dispatcher中Current为null...请不要在这里使用 High ,一般都是使用比较低的优先 为何不设置为 High ,参见 CoreDispatcherPriority 那么比较推荐的一个方法是在一个用户控件或者Page之类的,如果在里面使用了异步线程需要访问...ui 的属性,那么可以使用下面代码 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => {

51040

win10 uwp 非ui线程访问 ui

大家都知道,不可以在 其他线程访问 UI 线程,访问 UI 线程包括给 依赖属性设置值、读取依赖属性、调用方法(如果方法里面修改了依赖属性)等。...一旦访问UI线程,那么就会报错,为了解决这个问题,需要使用本文的方法,让后台线程访问 UI 线程。...本文提供三个方法可以让其他线程访问 UI 线程 第一个方法是比较不推荐使用的,可能出现 win10 uwp Window.Current.Dispatcher中Current为null...请不要在这里使用 High ,一般都是使用比较低的优先 为何不设置为 High ,参见 CoreDispatcherPriority 那么比较推荐的一个方法是在一个用户控件或者Page之类的,如果在里面使用了异步线程需要访问...ui 的属性,那么可以使用下面代码 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => {

1.1K10

WPF 支持的多线程 UI 并不是线程安全的

WPF 支持创建多个 UI 线程,跨窗口的或者窗口内的都是可以的;但是这个过程并不是线程安全的。 你有极低的概率会遇到 WPF 多线程 UI线程安全问题,说直接点就是崩溃。...本文将讲述其线程安全问题。...简述这个线程安全问题 必要条件: 创建多个 WPF UI 线程 其实两个就够了,一个我们平时写的 App 类所在的主 UI 线程;一个后台 UI 线程,例如用来显示启动闪屏的 UI 线程 两个线程的话你需要大量重复试验才能复现...;而创建更多线程可以大大提高单次复现概率 这些 UI 线程都显示 WPF 窗口 无论是 .NET Framework 4.7.2 版本的 WPF,还是 .NET Core 3 版本的 WPF 都会出现此问题...Dispatcher.CurrentDispatcher)); 本文会经常更新,请阅读原文: https://blog.walterlv.com/post/wpf-multi-thread-ui-is-not-thread-safe.html

23720

redis多线程模型_js进程和线程的区别

0、原理:只要所有前台线程都终止后,CLR就会对每一个活在的后台线程调用Abort()来彻底终止应用程序。...1、当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为FALSE的。 2、当主线程退出的时候,IsBackground=FALSE的线程还会继续执行下去,直到线程执行结束。...3、只有IsBackground=TRUE的线程才会随着主线程的退出而退出。 4、当初始化一个线程,把Thread.IsBackground=true的时候,指示该线程为后台线程。...后台线程将会随着主线程的退出而退出。 转载于:https://my.oschina.net/robortly/blog/916020 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

35920

java:ObservableObserver模式在SWT环境下UI线程UI线程的透明化调用

但是我们知道大部分UI框架(比如SWT)都要区分UI线程和非UI线程,如果Observable对象在非UI线程执行notifyObservers操作,而Observer的update方法又涉及UI对象的操作时就会抛出异常...(参见 《SWT的UI线程和非UI线程》) 如果Observer的代码不用关心自己是不是在UI线程,就可以降低Observer代码的复杂度,所以为解决这个问题,我对Observable做了进一步封装。...线程/非UI线程的透明化调用 * @author guyadong * */ public class SWTObservable extends Observable { /**...* {@link Observer}在SWT环境下的重新封装 * 实现UI/非UI线程透明化 * @author guyadong * */ class...线程和非UI线程》http://blog.csdn.net/dollyn/article/details/38582743

47510

JS如何实现多线程

线程的问题 javascript是单线程执行的,在处理运算过程中,浏览器不能执行其它javascript脚本,UI渲染线程也会被挂起,从而导致浏览器进入僵死状态 例如执行经典的 Fibonacci...,当前线程就可以继续执行,这就需要多线程的能力 Web Worker 是 HTML5 提供的一个javascript多线程解决方案,可以将一些大计算量的代码交由web Worker运行而不冻结用户界面...web worker有两个好处:快速、不阻塞浏览器响应 对于上面的示例,可以创建一个worker线程来执行fibonacci运算 代码 ?...worker.js ?...结果 开始计算1 worker执行的时候继续执行 结果1用时:779 开启worker线程后,就不再阻塞当前线程了,并且可以开启多个worker线程,web worker很好的解决JS线程模型的不足

4.6K50

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券