c#在另一个线程上更改表单字符串

时间:2013-01-04 10:23:23

标签: c# multithreading backgroundworker

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

OverviewOrgan_NavBarHelper cNavBarHelper = new OverviewOrgan_NavBarHelper(Organization);

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

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

3 个答案:

答案 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),而这些项目无法从另一个线程进行操作。

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