1

我的代码更改了导航栏项目的标题:

OverviewOrgan_NavBarHelper cNavBarHelper = new OverviewOrgan_NavBarHelper(Organization);

foreach (NavBarItem item in GetNavigationBar.Items)
{                       
    string cCaption = cNavBarHelper.UpdateNavBarItemCaption(item);
    item.Caption = cCaption;
}

现在它在主线程上,但我必须将它移动到另一个线程。我知道 UI 不应该从另一个威胁中改变,然后它就被制作出来了,所以我考虑使用 BackgroundWorker。事实上,我不使用线程,有人可以为我的任务建议最佳解决方案吗?

4

3 回答 3

5

您可以使用 Invoke 从另一个线程更新 UI。

看看这篇文章:如何从 C# 中的另一个线程更新 GUI?

例如:

MethodInvoker NavBarItemInvoker = (delegate
{
   OverviewOrgan_NavBarHelper cNavBarHelper = new OverviewOrgan_NavBarHelper(Organization);

   foreach (NavBarItem item in GetNavigationBar.Items)
   {                       
       string cCaption = cNavBarHelper.UpdateNavBarItemCaption(item);
       item.Caption = cCaption;
   }
});

if (InvokeRequired)
{
   Invoke(NavBarItemInvoker);
}
else
{
    NavBarItemInvoker();
}
于 2013-01-04T10:24:56.947 回答
2

我认为您应该为此使用调度程序

在本文中了解更多信息:http: //msdn.microsoft.com/en-us/magazine/cc163328.aspx

于 2013-01-04T10:27:31.713 回答
2

看看这个线程中的第一个答案。 它解释了如何使用 BackgroundWorker。

但问题是,导航栏的项目是在 UI 线程中创建的(假设您使用的是 WPF),并且无法从另一个线程进行操作。

为什么你必须在另一个线程中这样做?

于 2013-01-04T10:46:47.590 回答