分類:[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イベントを割り当ててください。