proglog

主にプログラミングに関する断片的メモ

[devel][c#] フォームとスレッド

vs2008のc#で。

デフォルトの状態のまんまのFormLabelを一つ貼り付けて、Dockはfill。これに適当に文字を入れただけのもの。
これを、ThreadPool.QueueUserWorkItemで表示すると、Labelの部分が欠けて、あるいは透明になって、裏が透ける状態になる。
マウスポインタをもっていっても、時計状態。
どういうこと?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Threading;

namespace FormInThread
{
    static class Program
    {
        /// <summary>
        /// アプリケーションのメイン エントリ ポイントです。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            var f1 = new Form1();
            ThreadPool.QueueUserWorkItem(new WaitCallback((Object obj) => f1.Show()));
            Application.Run();

        }
    }
}

アラートソフトなんかで、アラートフォームを表示してるのはスレッドじゃないんだろうか。

それにしても、久しぶりにC#を触ったらほとんど忘れてた。
0からじゃないものの、1.5くらいから勉強し直し。
まったくの入門からやるのはだるい感じだし、中級編にはまだ歯が立たない、という中途半端さ。