スレッドネタもう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 .NET で Windows Application として生成されたフォームとか、デフォルトで上記のような状態なので [ A ] と [ B ] に期待している値が入っていなかった方はご注意を。