WPF--调用线程必须为 STA,因为许多 UI 组件都需要(转载)

自VS2005开始,UI元素在不同线程中访问就受到限制了,当然你也可以解除这种限制

以下提供Framework3.0的解决方案发:

public partial class Window1 : Window
    {
        private delegate void DoTask();
        public Window1()
        {
            InitializeComponent();

Thread t = new Thread(new ThreadStart(Start));
            t.Start();
            
        }
        private void Start()
        {
            System.Windows.Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new DoTask(DoMyTask));
        }
        private void DoMyTask()
        { 
            //在此执行你的代码
        }
    }

如果是2.0的,你可以看看这篇文章

http://hi.baidu.com/aptsnail/blog/item/2c7e717a003407e92e73b388.html

时间: 2024-08-22 23:37:35

WPF--调用线程必须为 STA,因为许多 UI 组件都需要(转载)的相关文章

WPF 之 调用线程必须为 STA,因为许多 UI 组件都需要

WPF中,代码中准备控制控件内容时,有时会报错:“ 调用线程必须为 STA,因为许多 UI 组件都需要 ”. 如在winform下面,使用多线程时,控件的值读取是可以的,但如果要更改,那么就必须进行一些特别的处理.WPF中也一样. 首先,WPF中,当报上面那个错误时,代码可以改成类似以下: void authOK(AuthorizationResult auth) { App.Current.Dispatcher.Invoke((Action)(() => { labInfo.Content =

Wpf 调用线程无法访问此对象,因为另一个线程拥有该对象,解决方案

1.Wpf 多线程修改UI示例: //启动线程修改UI,抛出异常 ThreadPool.QueueUserWorkItem((q) => { button.Content = "张三"; }, null); 解决方案:使用Dispatcher.BeginInvoke+委托方式,修改UI 将修改UI的代码封装在委托中 //启动线程处理 Thread thread1 = new Thread(UpdateBtn); thread1.IsBackground = true;//设置为后

WPF的线程模型

原文:WPF的线程模型 WPF的线程模型 周银辉 谈到多线程,很多人对其可能都不太有好感,觉得麻烦与易出错.所以我们不排除有这样的情况:假设我对“多线程”.“异步”这些字眼潜意识地有些反感,所以在编码过程中能不用就不用,觉得延迟几百毫秒还是可以忍受的,如果系统中这种“可以忍受”的地方很多,最后我们会发现系统的性能变得一团糟,界面总是在“卡”(阻塞).这里我们讨论一下WPF的多线程模型,以便利用它使我们的UI线程得到解脱. 1,UI线程 传说WPF应用程序都至少有两个线程,一个用于UI绘制,其隐藏

如何在调用线程的时候传递参数

我们在写Remoting程序或者其他的一些应用程序的时候难免要和线程打交道,.Net使我们很容易就可以创建一个线程,但是它提供的创建线程和启动线程的方法没有明显的提供参数,假如我们要用线程来启动类里面一个带参数的方法该怎么办?下面就简单的介绍如何使用.NET提供的丰富的框架来实现这个功能.为了可以生动详细的介绍整个过程,我建立下面的一个.NET类,它也是要用线程启动的方法的载体.类如下所示: using System; namespace WindowsApplication1 { /// <s

WPF调用Matlab函数方法

有的时候用C#写图像处理方法,比较费事,不如Matlab简单,但是Matlab又做不出WPF那样的好看界面,怎么办呢. 今天正好我要实现这个功能,就顺便写个小例子,给需要的人做个借鉴. 想要用WPF调用Matlab代码,就用到了Matlab生成.DLL文件的功能. 注:我的VS版本是2013,Matlab版本是2012a,两个软件不算新也不算老,应该是现在普遍用的版本 首先,生成Matlab的.DLL文件 在matlab的左下角选择start-matlab-NE-deploytool,或者直接在

WPF 调用资源图片

原文:WPF 调用资源图片 最近做的wpf项目中,在开发的时候,把图片放到了bin下面,采用了imagePath =System.IO.Directory.GetCurrentDirectory()+"/images/starShow.jpg";获得图片是可以的,可是发布之后却获取不到图片,这让我很纠结,后来通过把图片添加到了资源中,然后调用资源即可解决了问题 imagePath = "pack://application:,,,/Financial;component/Pr

WPF 通过线程使用ProcessBar

WPF下使用进度条也是非常方便的,如果直接采用循环然后给ProcessBar赋值,理论上是没有问题的,不过这样会卡主主UI线程,我们看到的效果等全部都结束循环后才出现最后的值. 所以需要采用线程或者后台方式给进度条赋值的方式,以下通过线程来触发事件触发的方式来实现给进度条赋值.这样就可以模拟我们在实际过程中处理数据的一种进度方式. 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using Sy

使用wpf调用海康威视视频

前情:本文仅记录WPF调用sdk的方法. 1.下载海康威视sdk 链接地址:https://www.hikvision.com/cn/download_more_570.html 2.将官方demo的winform代码转到wpf中,此时发现winform中使用picturebox加载视频,且需要传入句柄. 所以想到使用wpf调用winform的控件. 引用System.Windows.Forms.System.Windows.Presentation和WindowsFormsIntegratio

installEventFilter可以安装到任何QObject的子类,并不仅仅是UI组件。事件过滤器和安装过滤器的组件必须在同一线程,在它们分属在不同线程时,事件过滤器也是不起作用的

Qt的事件知识点: ①事件对象创建完毕后,Qt 将这个事件对象传递给 QObject 的 event() 函数.event() 函数并不直接处理事件,而是将这些事件对象按照它们不同的类型,分发给不同的事件处理器(event handler). ②event() 函数主要用于事件的分发. ③事件过滤例子: 解释这个例子之前先看:bool eventFilter(QObject*obj,QEvent*event); [virtual]注意: eventFilter 函数返回 bool 值, 即, 如