我的代码更改了导航栏项目的标题:
OverviewOrgan_NavBarHelper cNavBarHelper = new OverviewOrgan_NavBarHelper(Organization);
foreach (NavBarItem item in GetNavigationBar.Items)
{
string cCaption = cNavBarHelper.UpdateNavBarItemCaption(item);
item.Caption = cCaption;
}
现在它在主线程上,但我必须将它移动到另一个线程。我知道UI不应该从另一个威胁改变,然后它就会被创建,所以我想到了使用BackgroundWorker。 事实上,我不是在使用线程,有人可以为我的任务提出最佳解决方案吗?
答案 0 :(得分:5)
您可以使用Invoke从另一个线程更新UI。
看一下这篇文章:How to update the GUI from another thread in C#?
例如:
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();
}
答案 1 :(得分:2)
我认为你应该使用调度员
在本文中阅读更多相关信息: http://msdn.microsoft.com/en-us/magazine/cc163328.aspx
答案 2 :(得分:2)
have a look at the first answer in this thread. 它解释了如何使用BackgroundWorker。
但问题是,导航栏中的项目是在UI-Thread中创建的(假设您使用的是WPF),而这些项目无法从另一个线程进行操作。
为什么你必须在另一个线程中这样做?