我在 C# 4.0 中实现了一个漫画阅读器,由于我实现了一些过程,从一个图像浏览到下一个图像需要一些时间。
因此,我以这样一种方式实现它,即 UI 线程将首先显示未处理的图像,而后台线程正在处理图像,然后替换未处理的图像。
一切正常,但现在,一些用户会疯狂地喜欢连续点击下一张图片,这会导致后台工作人员处理所有这些点击并显示所有图片。
我想要什么:如果用户点击多次,我希望后台工作人员只处理最后一个线程。
我做了什么:现在,我实现了一个检查活动线程数的函数,如果活动线程大于 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;
}