【发布时间】:2014-01-10 09:06:42
【问题描述】:
我有一个应用程序,我正在使用后台工作程序来启动一些序列。 有时需要更新 GUI。
我有引用一些 gui 对象的静态类。 在我的逻辑中,我想用一些参数从这个静态类中调用方法,在那里分析它并更新 GUI。 但我有“调用线程无法访问此对象,因为另一个线程拥有它。”异常。
在第一个线程中设置变量:
public static void SetCardHand(ref CardHand ch)
{
cardHand = ch;
}
从后台工作线程调用的方法:
private static void SetCoveredCardsPlayer0(int cardsNumber)
{
if (cardsNumber < 1)
cardHand.imgCard1.Source = null;
else
cardHand.imgCard1.Source = (ImageSource)WindowManager.Instance.CardsGUI.CardsDictionary["T1"];
}
如何让这个方法改变图形界面?
编辑
它不是一个窗口类。有点像主持人。
编辑2
这是一款纸牌游戏。我在后台工作人员中启动它,我需要在每次交易后更新图像源(代表卡)。
【问题讨论】:
-
根据您的应用设计,大纲为 backgroundworker.WorkerReportsProgress = true,并订阅将在 UI 线程上运行的 ProgressChanged。
-
你必须详细说明在哪里调用 SetCoveredCardsPlayer0。它应该来自 Completed 或 ProgressChanged 事件处理程序——如果不是,您将获得该异常。如果您在 Completed 或 ProgressChanged 事件处理程序以外的其他东西上进行调用,请查看 Grant 在下面发布的答案
标签: c# multithreading backgroundworker