1

ナビゲーションバーアイテムのキャプションを変更する私のコード:

OverviewOrgan_NavBarHelper cNavBarHelper = new OverviewOrgan_NavBarHelper(Organization);

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

現在はメインスレッドにありますが、別のスレッドに移動する必要があります。UIを別の脅威から変更してはいけないことを知っているので、UIを作成するので、BackgroundWorkerを使用することを考えました。実際、私はスレッドを使用していないので、誰かが私のタスクに最適なソリューションを提案できますか?

4

3 に答える 3

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();
}
于 2013-01-04T10:24:56.947 に答える
2

そのためにはディスパッチャーを使うべきだと思います

この記事でそれについてもっと読む:http: //msdn.microsoft.com/en-us/magazine/cc163328.aspx

于 2013-01-04T10:27:31.713 に答える
2

このスレッドの最初の答えを見てください。 BackgroundWorkerの使用方法について説明します。

ただし、問題は、ナビゲーションバーのアイテムがUIスレッド内で作成され(WPFを使用していると想定)、それらを別のスレッドから操作できないことです。

なぜ別のスレッドでそれをしなければならないのですか?

于 2013-01-04T10:46:47.590 に答える