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

Edg*_*gar 1 c# multithreading backgroundworker

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

OverviewOrgan_NavBarHelper cNavBarHelper = new OverviewOrgan_NavBarHelper(Organization);

foreach (NavBarItem item in GetNavigationBar.Items)
{                       
    string cCaption = cNavBarHelper.UpdateNavBarItemCaption(item);
    item.Caption = cCaption;
}
Run Code Online (Sandbox Code Playgroud)

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

Hae*_*nal 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();
}
Run Code Online (Sandbox Code Playgroud)