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



修改导航栏标题的代码:

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

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

您可以使用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();
}

看看这个帖子的第一个答案。它解释了如何使用BackgroundWorker。

但是问题是,你的导航栏的项目是在ui线程中创建的(假设你使用的是WPF),这些项目不能从另一个线程中操作。

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

我认为你应该使用dispatcher

阅读更多关于它的文章:http://msdn.microsoft.com/en-us/magazine/cc163328.aspx

最新更新