C#/WPF - 我无法从后台工作人员更新 UI

2023-12-01

我有一个代码可以使用以下命令从特定 Twitter 帐户获取推文推特锐利库,创建自定义实例UserControl并发布推文UserControl然后将其添加到StackPanel.

但是,我必须收到很多推文,并且在向应用程序添加用户控件时,应用程序似乎会冻结StackPanel。我尝试使用BackgroundWorker,但直到现在我还没有那么幸运。

我的代码:

private readonly BackgroundWorker worker = new BackgroundWorker();

// This ( UserControl ) is used in the MainWindow.xaml
private void UserControl_Loaded_1(object sender, RoutedEventArgs e)
{
    worker.DoWork += worker_DoWork;
    worker.RunWorkerCompleted += worker_RunWorkerCompleted;
    worker.RunWorkerAsync();
}

private void worker_DoWork(object sender, DoWorkEventArgs e)
{
    int usrID;

    var service = new TwitterService(ConsumerKey, ConsumerSecret);
    service.AuthenticateWith(AccessToken, AccessTokenSecret);
    ListTweetsOnUserTimelineOptions options = new ListTweetsOnUserTimelineOptions();
    options.UserId = usrID;
    options.IncludeRts = true;
    options.Count = 10;
    twitterStatuses = service.ListTweetsOnUserTimeline(options);
}

private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    try
    {
        foreach (var item in twitterStatuses)
        {
            TweetViewer tweetViewer = new TweetViewer(); // A UserControl within another UserControl
            tweetViewer.Tweet = item.Text;
            tweetViewer.Username = "@stackoverflow";
            tweetViewer.RealName = "Stack Overflow"
            tweetViewer.Avatar = ImageSourcer(item.Author.ProfileImageUrl);
            stackPanel.Children.Add(tweetViewer);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

}

我现在要做的是解决无法执行其中包含的代码的问题worker_RunWorkerCompleted在一个BackgroundWorker但每次我尝试使用BackgroundWorker它失败并给我错误,例如:

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

我也尝试使用STA 系统.Threading.Thread而不是BackgroundWorker,但运气不好!

我缺少什么?我对 WPF 真的很陌生,我可能忽略了一些重要的事情。


您会收到此异常,因为您的后台工作程序使用新线程,并且该线程与主 UI 线程不同。 为了简化错误消息,您无法从另一个线程更改 UI 元素,它们是独立的。

This answer会解决你的问题。

我也发现了这个answer来自@Marc Gravell

///...blah blah updating files
string newText = "abc"; // running on worker thread
this.Invoke((MethodInvoker)delegate {
    someLabel.Text = newText; // runs on UI thread
});
///...blah blah more updating files
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#/WPF - 我无法从后台工作人员更新 UI 的相关文章

随机推荐

  • R Hessian 矩阵

    我需要创建函数的 Hessian 矩阵 如下所示 func lt expression sin x y cos x y vars lt c x y 我也需要二阶导数作为表达式 并且需要多次计算它们 所以我制作了一个一阶导数列表和一个二阶导数
  • git 更新后脚本不起作用

    编辑我的后老问题有几次 我提出了一个新问题 因为现在这是一个新问题 In git hooks post update I have echo a gt gt home pi log git update server info git st
  • XML:处理大数据

    您推荐哪种 XML 解析器用于以下目的 XML 文件 已格式化 包含空格 大约 800 MB 它主要包含三种类型的标签 我们称它们为 n w 和 r 它们有一个名为 id 的属性 我必须尽快搜索该属性 删除我不需要的属性可以节省大约 30
  • 如何使用 Firebase 客户端通过多个客户端连接(Node.JS 客户端库)连接到 Nest API?

    我正在构建一个需要处理多个用户的中央模块 让他们订阅其巢上的数据更改 根据我的搜索 Node JS 库不允许我与 Google Nest API 进行多个 Firebase 连接 在不使用 REST 或 REST 流式传输的情况下 是否有任
  • ObjectSet.AddObject() 与 EntityCollection.Add()

    假设我有两个实体集 团队 和 玩家 我正在向系统添加新团队 为了便于讨论 假设我从一个文件 包含重复项 中添加一千个团队 该系统包含 100 个团队来启动 我的目标是避免重复 而不为每个添加的团队调用 SaveChanges 流程是查询新的
  • AJAX跨域调用

    我了解AJAX跨域策略 所以我不能只是打电话 http www google com 通过 ajax HTTP 请求并显示 结果在我的网站上的某个地方 我尝试使用 dataType jsonp 这实际上可以工作 但我收到语法错误 显然是因为
  • python 深拷贝和浅拷贝并传递引用

    关于python深拷贝和浅拷贝的问题 该帖子位于深拷贝和浅拷贝有什么区别 帮不了我 为什么例如1的和是6而不是10 e g 1 kvps 1 1 2 2 theCopy kvps copy both point to the same me
  • 获取 pandas 数据框中两个日期时间列的差异[重复]

    这个问题在这里已经有答案了 我有一个数据框 它显示的类型为 signup time 151112 non null datetime64 ns purchase time 151112 non null datetime64 ns 实际值的
  • 通用Windows平台和Live SDK

    我有个问题 我最近在我的计算机上安装了 VS 2015 和 Windows 10 拥有通用应用程序真是太棒了 我计划在 UWP 上转换我的一些程序 但我有一个问题 在我的一个程序中 我允许用户将其数据保存在 OneDrive 上 如果 On
  • 如何将 stringVar() 从 tk 转换为 pyqt

    我有这个函数作为我的代码的一部分 我正在尝试从 tk 迁移到 pyqt 但我在 pyqt 方面没有太多经验 我正在尝试生成 Tkinter 字符串变量列表来存储条目 def generate stringvars self temp ent
  • PHP date() 函数没有给出正确的时间

    我试图找出为什么 php date 给我错误的时间 将实际时间设置为 2 小时 这给出了 2011 01 01 03 14 04 而不是 2011 01 01 05 14 04 小时减少 2 我没有更改 date 的时区 当用户访问该网站时
  • 如何从 dict 中获取值列表?

    如何获取 Python 字典中的值列表 在 Java 中 以列表形式获取 Map 的值就像执行以下操作一样简单list map values 我想知道 Python 中是否有一种类似的简单方法可以从字典中获取值列表 dict values返
  • 指向整数数组的指针与指向整数的双指针

    我本以为整数数组是指向整数的指针类型 因此这意味着指向整数数组的指针是指向整数的双指针类型 但我得到的结果却表明事实并非如此 我怀疑整数数组类型不是指向整数的指针类型 这是我的例子 int main int p 3 1 2 3 int pt
  • 迭代时从哈希集中删除元素[重复]

    这个问题在这里已经有答案了 所以 如果我尝试从 Java 中删除元素HashSet迭代时 我得到并发修改异常 从数组中删除元素子集的最佳方法是什么HashSet就像下面的例子一样 Set
  • 在云功能中,我如何从另一个集合加入以获取数据?

    我正在使用云功能向移动设备发送通知 我在 Firestore 中有两个集合clientDetail and clientPersonalDetail 我有clientID两个集合中相同 但日期存储在clientDetail名称存储在 cli
  • Oracle SQL:如何显示空周/没有数据的周?

    如同这个问题 但我的数据集还有一个包含许多 ID 的附加列 每个 ID 都有一个按恒定时间范围回溯的数据集 并且某些周可能会丢失数据 我想填写丢失周的值 例如 我想要这个 ID WEEKEND DAY VALUE A00 2012 01 0
  • Android USBHost 模式 - 为什么我的 IRDA 设备在 ClaimInterface 上失败?

    我的 Xperia Neo Cyanogen Mod 9 连接了一个 Lindy IRDA USB 桥接器 我已经更改了功能以支持主机模式等 代码中一切看起来都很好 我检测到该设备 我可以看到接口和两个端点 一进一出 但是一旦我尝试声明接口
  • 列表框(JList)不会从自定义 ListModel 动态更新

    我正在使用 Seesaw 在 Clojure 中开发 GUI 应用程序 并且在我的自定义 ListModel 更新时无法更新列表框 Java 中的 JList 这是我的一些代码 deftype ActionHistoryListModel
  • python 中多线程应用程序中的分段错误

    我在 python 中有一个多线程应用程序 其中我创建了多个生产者线程 它们从数据库中提取数据 数据以块的形式提取 因此 线程创建具有限制值的sql语句的部分被保留在锁内 为了让线程同时执行查询 query 函数被保留在锁之外 然后结果获取
  • C#/WPF - 我无法从后台工作人员更新 UI

    我有一个代码可以使用以下命令从特定 Twitter 帐户获取推文推特锐利库 创建自定义实例UserControl并发布推文UserControl然后将其添加到StackPanel 但是 我必须收到很多推文 并且在向应用程序添加用户控件时 应