То, как вы пытаетесь это сделать, просто задержит саму проблему на 2 секунды.Все щелчки будут обработаны через две секунды.
Вы можете попытаться использовать рабочий поток.Допустим, вы используете очередь, в которой хранится информация о каждом элементе, который был нажат во время нажатия.Существующий поток, созданный при создании класса, получает уведомление о добавлении новых элементов в очередь.Поток получает первый элемент, обрабатывает его, обновляет пользовательский интерфейс.Если есть больше элементов, он берет следующий, обрабатывает его и т. Д. Когда больше нет элементов, поток переходит в спящий режим, пока не станут доступны новые элементы (ManualResetEvent
здесь поможет).
шаблон будет:
void ItemClicked(...)
{
lock (WorkQueue)
{
QueueNewClickItem(...);
m_workToDo.Set();
}
}
void WorkerThread(...)
{
bool threadShouldEnd = false;
while (!threadShouldEnd)
{
if (WaitHandle.WaitAny(m_workToDo, m_endThread) == 0)
{
lock (WorkQueue)
{
CopyAllPendingWorkItemsToListInThread();
ClearWorkQueue();
m_workToDo.Reset();
}
while (!AllLocalItemsProcessed)
{
ProcessNextWorkItem();
}
}
else
{
threadShouldEnd = true;
}
}
}