Top > .NET > スレッドを使う

Threadクラス Edit

IsBackgroundについて Edit

IsBackground == falseの場合、他のスレッドが終了してもそのスレッドが終了するまで、アプリケーションは終了しない。

以下のコードの場合、IsBackground == false なら、フォームの閉じるボタンを押してもWorkerが終了するまで終了しない。true にすると閉じるボタンを押すとすぐに終了するようにする。

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            Thread th = new Thread(new ThreadStart(Worker));
            th.IsBackground = true;  // これ
            th.Start();
        }

        public void Worker()
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(String.Format("count {0}", i));
                Thread.Sleep(1000);

            }
        }
    }

BackgroundWorkerクラス Edit

バックグラウンドで時間のかかる処理をさせて、その経過状況(何%完了)をプログレスバーで表示したい場合は、BackgroundWorkerクラスが便利。

プログレスバー Edit

ProgressBarというコンポーネントがある。
デザイナ上で設定ができるので便利だが、けっこう問題点も多いようだ。

Styleプロパティで見た目・挙動を選択できる。

Blocksオーソドックス
Continuous連続
Marquee自動的にスクロールする。完了率を示すためには使えない

しかし、Windows XPではStyleのBlocksとContinuousが同じ見た目・挙動になってしまう。

Application.EnableVisualStyles();

をコメントアウトしてvisual styleを無効にすればよい。
http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/58588a88-e58f-4fb5-8a92-dfcccc80137f



URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes