解决 办法 public void SomeMethod() { var task = System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action( () => { //自己要执行的语句 MessageBox.Show("开始"); } )); task.Completed += new EventHandler(task_Completed); } public void task_Completed…
WPF中,代码中准备控制控件内容时,有时会报错:“ 调用线程必须为 STA,因为许多 UI 组件都需要 ”. 如在winform下面,使用多线程时,控件的值读取是可以的,但如果要更改,那么就必须进行一些特别的处理.WPF中也一样. 首先,WPF中,当报上面那个错误时,代码可以改成类似以下: void authOK(AuthorizationResult auth) { App.Current.Dispatcher.Invoke((Action)(() => { labInfo.Content =…
WPF中,代码中准备控制控件内容时,有时会报错: 调用线程必须为 STA,因为许多 UI 组件都需要 我知道,在winform下面,使用多线程时,控件的值读取是可以的,但如果要更改,那么就必须进行一些特别的处理.难道在WPF中,也一样吗? 首先,WPF中,当报上面那个错误时,代码可以改成类似以下: void authOK(AuthorizationResult auth) { App.Current.Dispatcher.Invoke((Action)(() => { labInfo.Conte…
本文说明WPF [调用线程无法访问此对象,因为另一个线程拥有该对象.] 解决方案以及如何实现字体颜色的渐变 先来看看C#中Timer的简单说明,你想必猜到实现需要用到Timer的相关知识了吧. C# Timer用法有哪些呢?我们在使用C# Timer时都会有自己的一些总结,那么这里向你介绍3种方法,希望对你了解和学习C# Timer使用的方法有所帮助. 在C#里关于定时器类有下面3个: 1.定义在System.Windows.Forms里 2.定义在System.Threading.Timer类…
自VS2005开始,UI元素在不同线程中访问就受到限制了,当然你也可以解除这种限制 以下提供Framework3.0的解决方案发: public partial class Window1 : Window    {        private delegate void DoTask();        public Window1()        {            InitializeComponent(); Thread t = new Thread(new ThreadSta…
WPF [调用线程无法访问此对象,因为另一个线程拥有该对象.] 解决方案 在这里以播放图片为例进行说明,代码如下: void _Timer_Elapsed(object sender, ElapsedEventArgs e) { this.image.Dispatcher.Invoke( new Action( delegate { ) { _CurrentIndex = ; } else { _CurrentIndex++; } _CurrentImage = _ImageFiles[_Cur…
WPF:Dispatcher.Invoke 方法,只有在其上创建 Dispatcher 的线程才可以直接访问DispatcherObject.若要从不同于在其上创建 DispatcherObject 的线程的某个线程访问 DispatcherObject,请对与 DispatcherObject 关联的 Dispatcher 调用 Invoke 或 BeginInvoke.需要强制线程安全的 DispatcherObject 的子类可以通过对所有公共方法调用 VerifyAccess 来强制线程…
WPF中在对界面进行操作的时候,可能会遇到"调用线程无法访问此对象,因为另一个线程拥有该对象"异常,这是因为WPF中只有UI线程才能操作UI元素,非UI线程要访问UI时就会报异常了. 解决方法: Dispatcher.BeginInvoke()与Invoke()方法.BeginInvoke()异步执行,不等待委托结束就更新,Invoke()同步执行,需等待委托执行完. Dispatcher.BeginInvoke(new Action(delegate{ 你的操作... 如:textB…
原文:WPF不同线程之间的控件的访问 WPF不同线程之间的控件是不同访问的,为了能够访问其他线程之间的控件,需要用Dispatcher.Invoke执行一个新的活动即可. 例如: public void SetNotes(string notes) { if (Dispatcher.Thread != Thread.CurrentThread) { this.txtNote.Dispatcher.Invoke(new Action(() => { this.txtNote.Text += not…
原文:WPF的线程模型 WPF的线程模型            周银辉 谈到多线程,很多人对其可能都不太有好感,觉得麻烦与易出错.所以我们不排除有这样的情况:假设我对“多线程”.“异步”这些字眼潜意识地有些反感,所以在编码过程中能不用就不用,觉得延迟几百毫秒还是可以忍受的,如果系统中这种“可以忍受”的地方很多,最后我们会发现系统的性能变得一团糟,界面总是在“卡”(阻塞).这里我们讨论一下WPF的多线程模型,以便利用它使我们的UI线程得到解脱. 1,UI线程 传说WPF应用程序都至少有两个线程,一…
   在WPF应用中,如果遇到多线程的需求时,如果引用WPF控件时会引发异常,异常内容:调用线程无法访问此对象,因为另一个线程拥有该对象.具体如下: 调用代码: ThreadcountThread= new Thread( new ThreadStart(Count)); countThread.Start(); 在调用的Count方法引发如下 在WPF应用中,如果遇到多线程的需求时,如果引用WPF控件时会引发异常,异常内容:调用线程无法访问此对象,因为另一个线程拥有该对象.具体如下: 调用代码…
   在做WPF开发时,如果直接在子线程里更新UI会报错—–“调用线程无法访问此对象,因为另一个线程拥有该对象.”,这是因为WPF禁止在非UI线程里直接更新UI界面. 解决方案:   在子线程里调用Dispatcher.BeginInvoke()或者Invoke()方法.    例如更新一个Button上的文字内容,可以在子线程里这样写: this.myButton.Dispatcher.BeginInvoke(new Action(()=> { this.myButton.Content =…
有的时候用C#写图像处理方法,比较费事,不如Matlab简单,但是Matlab又做不出WPF那样的好看界面,怎么办呢. 今天正好我要实现这个功能,就顺便写个小例子,给需要的人做个借鉴. 想要用WPF调用Matlab代码,就用到了Matlab生成.DLL文件的功能. 注:我的VS版本是2013,Matlab版本是2012a,两个软件不算新也不算老,应该是现在普遍用的版本 首先,生成Matlab的.DLL文件 在matlab的左下角选择start-matlab-NE-deploytool,或者直接在…
一.加载本项目的图片WPF引入了统一资源标识Uri(Unified Resource Identifier)来标识和访问资源.其中较为常见的情况是用Uri加载图像.Uri表达式的一般形式为:协议+授权+路径协议:pack://授权:有两种.一种用于访问编译时已经知道的文件,用application:///一种用于访问编译时不知道.运行时才知道的文件,用siteoforigin:/// 一般用逗号代替斜杠,也就是改写作application:,,,和pack:,,,路径:分为绝对路径和相对路径.一…
WPF下使用进度条也是非常方便的,如果直接采用循环然后给ProcessBar赋值,理论上是没有问题的,不过这样会卡主主UI线程,我们看到的效果等全部都结束循环后才出现最后的值. 所以需要采用线程或者后台方式给进度条赋值的方式,以下通过线程来触发事件触发的方式来实现给进度条赋值.这样就可以模拟我们在实际过程中处理数据的一种进度方式. using System; using System.Collections.Generic; using System.Linq; using System.Tex…
获取调用线程tid #include <pthread.h>pthread_t pthread_self(void); 示例: #include <pthread.h> #include <unistd.h> #include <stdio.h> #include <string.h> #include <stdlib.h> void *printids(void *arg) { const char *str = (const ch…
不多说,直接上干货! 前期博客 牛客网Java刷题知识点之四种不同的方式创建线程 这里很简单 首先,系统通过调用线程类的start()方法来启动一个线程,此时这个线程处于就绪状态,而非运行状态,也就意味着这个线程可以被JVM来调度执行. 然后,在这个调度执行过程中,JVM会通过调用线程类的run()方法来完成实际的操作,当run()方法结束后,此线程就会终止. 注意: 如果直接调用线程类的run()方法,会被当作一个普通的函数来调用.也就是说,start()方法能够异步地调用run()方法,但是…
C# WPF 调用FFMPEG实现“SORRY 为所欲为/王境泽”表情包GIF生成 1,调用ffmpeg将外挂字幕“嵌入”视频中,保存副本: 2,调用ffmpeg将副本视频导出为gif图片. 参考资料: https://github.com/CAOJINGYOU/VideoEditor  http://blog.csdn.net/weiyuefei/article/details/51678582 https://github.com/xtyxtyx/sorry 获取代码: https://gi…
原文:WPF 调用资源图片 最近做的wpf项目中,在开发的时候,把图片放到了bin下面,采用了imagePath =System.IO.Directory.GetCurrentDirectory()+"/images/starShow.jpg";获得图片是可以的,可是发布之后却获取不到图片,这让我很纠结,后来通过把图片添加到了资源中,然后调用资源即可解决了问题 imagePath = "pack://application:,,,/Financial;component/Pr…
原文:WPF 调用API修改窗体风格实现真正的无边框窗体 WPF中设置无边框窗体似乎是要将WindowStyle设置为None,AllowTransparency=true,这样才能达到WinForm中无边框窗体的样式. 但是AllowTransparency=true后WPF性能会大大降低,动画很卡.无奈只好关闭: 仅设置WindowStyle为None,似乎达不到理想效果,还是有边框: 立刻想到可以通过API修改窗体风格:SetWindowLong 网上查阅资料,发现去掉了WS_CATION…
package seday08.thread;/*** @author xingsir * 守护线程又称为后台线程,默认创建出来的线程都是普通线程, 守护线程需要通过调用线程方法:setDaemon(boolean on)来进行设置.* 守护线程使用上与普通线程没有区别,但是在结束时机上有一个 不同之处:进程结束时,所有正在运行的守护线程都会被强制停止. * 而进程结束:当一个进程中所有的普通线程结束时进程结束* 我们也可以将某些会一致运行的任务,并且当主要业务执行完毕 后可以跟着一同结束的就都…
注:笔者使用的VS版本为2019.1.打开VS2019,选择文件 -> 新建 -> 项目 2.选择项目 新建项目时选择C++“控制台应用”语言:C++平台:Windows项目类型:空项目 3.添加C++代码源文件 -> 添加 -> 新建项 -> C++文件(.cpp) C++代码如下 #include <iostream> using namespace std; int Add(int a, int b) { return a + b; } 4.添加模块定义文件…
记一次Task抛异常,调用线程处理而引发的一些随想 多线程调用,任务线程抛出异常如何在另一个线程(调用线程)中捕获并进行处理的问题. 1.任务线程在任务线程执行语句上抛出异常. 例如: private void button2_Click(object sender, EventArgs e) { try { var task = Task.Factory.StartNew<bool>(() => { //Do Some Things throw new Exception("…
UI 只能在主线程内更新,子线程需要更新UI组件时可以这样: fun fuck(){ Executors.newSingleThreadExecutor().execute{ // url request ... val visibility = View.VISIBLE Handler(mainLooper).post { val btn = findViewById<Button>(R.id.button) btn.visibility = visibility } } Thread{ p…
因为没一个Looper处理消息循环,所以子线程中无法使用Toast 方法: Looper.prepare(); Toast.makeText(getActivity(),"刷到底啦",Toast.LENGTH_SHORT).show(); Looper.loop(); 在子线程中更新UI 第一种: new Handler(context.getMainLooper()).post(new Runnable() { @Override public void run() { // 在这里…
Qt的事件知识点: ①事件对象创建完毕后,Qt 将这个事件对象传递给 QObject 的 event() 函数.event() 函数并不直接处理事件,而是将这些事件对象按照它们不同的类型,分发给不同的事件处理器(event handler). ②event() 函数主要用于事件的分发. ③事件过滤例子: 解释这个例子之前先看:bool eventFilter(QObject*obj,QEvent*event); [virtual]注意: eventFilter 函数返回 bool 值, 即, 如…
第二节:在线程时空中操作界面(UI)   1.为什么要用 TThread ?   TThread 基于操作系统的线程函数封装,隐藏了诸多繁琐的细节. 适合于大部分情况多线程任务的实现.这个理由足够了吧? 什么?你要用 windows 的线程 api 来实现多线程? 我可以负责任地告诉你,如果你用 api 来实现多线程任务, 加之你天资聪明,对 delphi 的面向对象思想掌握得非常快, 那么最终也你也会写一个与 TThread 类似的东西来提高开发效率. 何必折腾呢?要相信 delphi 的工程…
[Android线程机制] 出于性能考虑,Android的UI操作并不是线程安全的,这就意味着如果有多个线程并发操作UI组件,可能导致线程安全问题.为了解决这个问题,Android制定了一条简单的规则:只允许UI线程修改Activity里的UI组件 当一个程序第一次启动时,Android会同时启动一条主线程(Main Thread),主线程主要负责处理与UI相关的事件,如用户的按键事件,用户接触屏幕的事件及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理.所以主线程通常又被叫做UI线程 [H…
原文:WPF界面设计技巧(9)-使用UI自动化布局 最近一直没时间更新这系列文章,因为我一直在埋头编写我的第一个WPF应用程序:MailMail 今天开始编写附属的加密/解密工具,对UI自动化布局有些心得,就此分享出来. 我们先来看一下实现的效果: 这样的界面是怎么个自动法呢?请看下图: 就是说界面在适度的伸缩时,不会破坏其布局结构及美观性. 这样做有什么好处呢?你可以想象以下情况: 1.需要用户或通过程序控制变更窗体尺寸以适应特殊要求时.UI自动化可以伸缩各元素以适应变化后的窗体. 2. 软件…
[Android线程机制] 出于性能考虑,Android的UI操作并不是线程安全的,这就意味着如果有多个线程并发操作UI组件,可能导致线程安全问题.为了解决这个问题,Android制定了一条简单的规则:只允许UI线程修改Activity里的UI组件 当一个程序第一次启动时,Android会同时启动一条主线程(Main Thread),主线程主要负责处理与UI相关的事件,如用户的按键事件,用户接触屏幕的事件及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理.所以主线程通常又被叫做UI线程 [H…