首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c#更改另一个线程上的表单字符串

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

Stack Overflow用户
提问于 2013-01-04 18:23:23
回答 3查看 1.2K关注 0票数 1

我的代码可以改变导航条项目的标题:

代码语言:javascript
运行
复制
OverviewOrgan_NavBarHelper cNavBarHelper = new OverviewOrgan_NavBarHelper(Organization);

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-04 18:46:48

have a look at the first answer in this thread.它解释了如何使用BackgroundWorker。

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-01-04 18:24:57

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

看看这篇文章:How to update the GUI from another thread in C#?

例如:

代码语言:javascript
运行
复制
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();
}
票数 5
EN

Stack Overflow用户

发布于 2013-01-04 18:27:32

我想你应该用一个调度程序

在本文中阅读更多关于它的内容:http://msdn.microsoft.com/en-us/magazine/cc163328.aspx

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14155257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档