如何在后台线程中创建 WPF 控件?

2023-11-23

我有创建后台线程来执行某些操作的方法。在这个后台线程中我创建对象。但是这个对象在运行时创建时给了我一个例外:

调用线程必须是 STA,因为许多 UI 组件都需要它。

我知道我必须使用 Dispatcher 来向 UI 反映某些内容。但在本例中,我只是创建一个对象,而不与 UI 进行交互。这是我的代码:

    public void SomeMethod()
      {
         BackgroundWorker worker = new BackgroundWorker();
         worker.DoWork += new DoWorkEventHandler(Background_Method);
         worker.RunWorkerAsync();
      }

   void Background_Method(object sender, DoWorkEventArgs e)
      {
         TreeView tv = new TreeView();
      }

如何在后台线程中创建对象?

我使用 WPF 应用程序


TreeView是一个UI控件。您只能在 UI 线程上创建和操作 UI 控件,因此您尝试执行的操作是不可能的。

你想要做的是在后台线程上完成所有耗时的工作,然后“回调”到UI线程来操作UI。这实际上很简单:

void Background_Method(object sender, DoWorkEventArgs e)
{
    // ... time consuming stuff...

    // call back to the window to do the UI-manipulation
    this.BeginInvoke(new MethodInvoker(delegate {
        TreeView tv = new TreeView();
        // etc, manipulate
    }));
}

我可能语法错误BeginInvoke(这超出了我的想象),但无论如何,你就可以了......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在后台线程中创建 WPF 控件? 的相关文章

随机推荐

  • EPPlus:将样式复制到范围

    我想将新行 列插入到工作表中 并应用插入的行 列的样式 背景颜色 边框等 这就是我添加新行的方式 xlsSheet InsertRow 18 RowCount 然后我想将 基 行的样式复制 应用到新插入的行 for int i 0 i lt
  • 从 Perl 创建的文本文件有行长度限制吗?

    在编写 Perl 脚本时 我需要在文件的一行中仅写入以逗号分隔的用户名 这就是为什么我想知道 txt 文件中行的最大大小是否有任何限制 文本文件就像任何其他文件一样 换行符与任何其他字符一样 因此仅适用通常的文件大小限制 旧文件系统上的 4
  • 接收远程推送通知时打开视图控制器

    我正在使用 Storyboard 当用户收到远程推送通知时 我想始终打开相同的视图 即使应用程序位于后台或打开 我需要呈现的视图是故事板中设置的初始视图控制器之后的四个视图 我读过这篇文章 如何将响应通知的模态视图显示为新窗口 无父VC 当
  • 直接包含文本的元素的 jQuery 选择器?

    我能够使用 contains选择器 但我的问题是 如果一个元素包含一个包含它仍然返回的文本的元素 例如 div contains test 将选择下面的两个 div div something else div test div div f
  • 为什么将 EntityState 设置为 Detached 会清空 List 类型的属性?

    首先使用实体 框架代码 我有类似的东西 public class Foo public int Id get set public List
  • 将字符串中的字母与数字分开

    我正在处理这样的字符串 125A12C15 我需要在字母和数字之间的边界处将它们分开 例如这个应该成为 125 A 12 C 15 在Python中是否有比逐个位置检查它并检查它是字母还是数字 然后相应地连接更优雅的方法 例如 此类事情的内
  • HTML 未在 Django 文本字段中呈现

    我试图使用 markdown 来避免在 wiki 表单中输入 HTML 但由于某种原因 表单显示的是 HTML 代码而不是预期的格式 我的视图函数如下 from django shortcuts import render to respo
  • 将环境变量设置为较大的值 - >“参数列表太长”

    在 bash 脚本中 我设置了一个环境变量来包含 100 万个字符的字符串 我这样做是这样的 export LG XXXXXXX 1 million X s 在此之后 我可以毫无问题地回显它 即 echo LG 但是 在此之后我尝试在脚本内
  • 停止php处理文件

    有什么方法可以让 php 停止处理文件并使其只处理已经解析的部分 我的意思是这样的
  • VSCODE 在保存时通过格式插入空格

    VSCODE 似乎在我的 html 代码中到处插入空格 我检查了设置 导致它的原因如下 editor formatOnSave true Example 如何配置它以停止插入空格 我有以下一组 editor formatOnSave fal
  • Python套接字连接超时

    我有一个套接字 我想在连接时超时 这样如果它无法连接 我可以取消整个操作 但它也想使用不需要超时的套接字的 makefile 有没有一种简单的方法可以做到这一点 或者这会是一件困难的事情吗 python 是否允许在连接后重置超时 以便我可以
  • Java:声明多维数组而不指定数组的大小(例如 new int[10][] )

    我一直试图弄清楚这里到底发生了什么 我只是想弄清楚我在下面评论的这两行代码正在做什么 我发现这个程序没有声明数组的完整维度 而不是 new int 10 5 它只是决定不通过说 new int 10 来声明它 就像第二个数组长度并不重要 将
  • 在不使用 UDF 和 CLR 的情况下,从 T-SQL 中的字符串中删除所有空白字符的好方法是什么?

    NET 函数string Trim 修剪相当广泛的空白字符集 如何以最佳方式 T SQL 模拟这种确切的行为 LTRIM and RTRIM仅修剪空格字符是不够的 这对于 SQL CLR 来说很容易 但这并不总是可行 而且调用成本也相当高
  • 之前的图像大小在 DOM 中

    在将图像放入 DOM 之前如何获取图像大小 var imgLoad img imgLoad attr src ImageGallery ImagesList index new Date getTime imgLoad unbind loa
  • 如何快速重新加载 ui 视图的内容

    我有一个视图控制器 其中有滚动视图 并且滚动视图有一个视图 因此 视图有很多按钮和标签 这些按钮和标签的显示取决于来自 api 的数据 按下后我有一个按钮 我想重新加载视图 它的内容 简单的黑客之一NOT推荐的方法是 self view s
  • TensorFlow 中使用稀疏标签进行多标签图像分类?

    我想对 n 个类别执行多标签图像分类任务 我为每个图像提供了稀疏标签向量 并且每个标签向量的每个维度当前都以这种方式编码 1 0 gt Label true Image属于这个类 1 0 gt Label false 图像不包含此类 0 0
  • 如何在 JavaScript 中返回值

    我有一个 JavaScript 函数 function myFunction value1 value2 value3 Do stuff and value2 somevalue2 to return value3 somevalue3 t
  • Ruby 企业版与 Ruby 1.9

    我计划建立一个简单的 CMS 网站 用户可以在其中提交和查看包含视频 照片和文本的帖子 我想要做出的一个决定是在 Ruby Enterprise Edition 和 Ruby 1 9 之间进行选择 我关心的事情按顺序 性能和可扩展性 与现有
  • 如何在JBOSS 5中启用远程调试?

    如何在 JBoss 5 中启用远程调试 JBoss 4 中的常用语句 set JAVA OPTS Xdebug Xnoagent Xrunjdwp transport dt socket address 8787 server y susp
  • 如何在后台线程中创建 WPF 控件?

    我有创建后台线程来执行某些操作的方法 在这个后台线程中我创建对象 但是这个对象在运行时创建时给了我一个例外 调用线程必须是 STA 因为许多 UI 组件都需要它 我知道我必须使用 Dispatcher 来向 UI 反映某些内容 但在本例中