C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 59 を表示中)
■33952 / )  vScrollBar内で重たい処理をすると動作が変になります
□投稿者/ 倉田 有大 (473回)-(2009/03/13(Fri) 21:28:31)

分類:[C#] 

2009/03/13(Fri) 21:46:34 編集(投稿者)
こんにちは倉田 有大です。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        ManualResetEvent m = new ManualResetEvent(false);

        public Form1()
        {
            InitializeComponent();
        }

        private void vScrollBar1_ValueChanged(object sender, EventArgs e)
        {
            m.Reset();
            ThreadPool.QueueUserWorkItem(waitCallback, "A");
            m.WaitOne();
        }
        private void waitCallback(object o)
        {
            Thread.Sleep(1000);
            m.Set();
        }
    }
}

こんなかんじで、vScrollBarのValueChangedイベントでManualResetEventでスレッドを止めて、スレッドプール内で時間がかかる処理をすると動作が変になります。
具体的に言うと、スクロールバー上でマウスをクリックしてスクロールバーの上にマウスを置いていると、マウスを放しても押しっぱなしのような状態になります。
回避方法がありましたなら、どなたかアドバイスお願いします〜

フリーソフトをマルチスレッド化したのですが、現在この不具合が〜この不具合が〜
バタンキューです。テルネリン飲んで休みます。

追記。すいません、ソースを実行する前にvscrollbar貼り付けて、ValueChangedイベントを割り当ててください。

返信 編集キー/


管理者用

- Child Tree -