C# 4.0 でコミック リーダーを実装していますが、実装したいくつかのプロセスのために、ある画像から次の画像への参照に時間がかかります。
したがって、バックグラウンド スレッドが画像を処理している間に UI スレッドが最初に未処理の画像を表示し、後で未処理の画像を置き換えるように実装しました。
すべて正常に動作しますが、一部のユーザーは狂ったように次の画像を継続的にクリックすることを好むため、バックグラウンド ワーカーがそれらすべてのクリックを処理し、すべての画像を表示します。
私が望むこと: ユーザーが複数回クリックした場合、バックグラウンド ワーカーが最後のスレッドのみを処理するようにします。
私がやったこと:現在、アクティブなスレッドの数をチェックする関数を実装しました。アクティブなスレッドが1より大きい場合、バックグラウンドスレッドは処理せずに前の画像を返します(未処理の画像がインデックスが 1 つ先になります)
アイデアがあれば、初心者のように説明してください!
private void button4_Click(object sender, EventArgs e)
{
Bitmap b = new Bitmap(this.CurrImage);
if (!shutdown)
{
process_updateThread = new Thread(new ThreadStart(process_update));
process_updateThread.Start();
}
pictureBox1.Image = b; //image will be replaced by worker thread image
pictureBox1.Location = ImageEdit.CalculateLocationImage(b);
SetBackColor(b);
ShowPageCount();
updateNavButtons();
}
void StopThread()
{
if(((IEnumerable)System.Diagnostics.Process.GetCurrentProcess().Threads).OfType<System.Diagnostics.ProcessThread>()
.Where(t => t.ThreadState == System.Diagnostics.ThreadState.Running).Count() > 1)
shutdown = true;
else shutdown = false;
}