スレッドネタもう1つ

次のプログラムの出力の空欄 [ A ] [ B ] を埋めよ(各5点)

using System;
using System.Resources;
using System.Threading;
using System.Globalization;

public class Program
{
  /// <summary> スレッドのカルチャを設定する </summary>
  private static void SetCulture(string name)
  {
    CultureInfo sci = CultureInfo.CreateSpecificCulture(name);

    Thread.CurrentThread.CurrentCulture = sci;
    Thread.CurrentThread.CurrentUICulture = sci.Parent;
  }

  /// <summary> 標準のリソースマネージャ </summary>
  static ResourceManager rm = new ResourceManager(typeof(Program));

  static void Main()
  {
    // 既定
    SayHello(0);

    // 日本語
    SetCulture("ja");
    SayHello(1);

    // 英語
    SetCulture("en");
    SayHello(2);

    // 問題1
    new Thread(new ThreadStart(ThreadTest)).Start();

    // 問題2
    ThreadPool.QueueUserWorkItem(new WaitCallback(PoolTest));
  }

  static void SayHello(int n)
  {
    // とりあえずリソースが存在しない例外は出ないものとする
    Console.WriteLine("{0}: {1}", n, rm.GetString("Hello"));
  }

  /// <summary> Thread 用 SayHello </summary>
  static void ThreadTest()
  {
    SayHello(3);
  }

  /// <summary> ThreadPool 用 SayHello </summary>
  static void PoolTest(object stateInfo)
  {
    SayHello(4);
  }
}

出力:
0: bonjour
1: こんにちは。
2: Hello.
4: [ A ]
3: [ B ]

以前に書いたけど、Microsoft .NET Framework と Mono とでは結果が異なる場合もあることにも注意。
Visual Studio .NETWindows Application として生成されたフォームとか、デフォルトで上記のような状態なので [ A ] と [ B ] に期待している値が入っていなかった方はご注意を。