Обнаружение событий касания в быстрой последовательности

#silverlight #windows-phone-7

#silverlight #windows-phone-7

Вопрос:

У меня есть страница, на которой отображается либо одно из нескольких изображений, либо кнопка. При нажатии на кнопку я скрываю ее и показываю следующее изображение в списке. Нажатие на изображение приводит к его исчезновению и повторному отображению кнопки.

При быстром нажатии кнопки несколько раз подряд отображаемое изображение не реагирует на нажатие. Я предполагаю, что это связано с блокировкой потока пользовательского интерфейса, но я попробовал это с рабочим потоком и все еще не работает.

 public void ShowNextImage()
    {

image_new.Source = getCurrentBitmap();
 workerThread.WorkerReportsProgress = true;
        workerThread.WorkerSupportsCancellation = true;
        workerThread.DoWork  = new DoWorkEventHandler(worker_DoWork);
        workerThread.RunWorkerCompleted  = new      RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
 workerThread.RunWorkerAsync();
  }
  void worker_DoWork(object sender, DoWorkEventArgs e)
    {

        Deployment.Current.Dispatcher.BeginInvoke(() =>
        {

                transition.Begin();
                transition.Completed  = delegate
                {
                    transition.Stop();
                };


        });


    }
    void worker_RunWorkerCompleted(object sender,
                           RunWorkerCompletedEventArgs e)
    {


        if (e.Error != null)
        {
            // Happens on the UI thread so its ok
            MessageBox.Show("Error occurred...");

        }
    }
  

Комментарии:

1. Можете ли вы улучшить это название, чтобы задать вопрос?

2. На какое событие вы подписаны на изображении?

3. Не могли бы вы, пожалуйста, показать какой-нибудь код, который демонстрирует, что вы делаете, и позволяет нам воссоздать проблему.

4. @Stuart: Извините, я новичок в этом stackoverflow в любом случае, спасибо за это.

5. @Richard Я хочу применить простое событие касания lki double_Tap Single_tap и т.д., Чтобы увеличить изображение или скрыть кнопку соответственно

Ответ №1:

Я рекомендую вам установить Windows Phone Toolkit из Codeplex и использовать GestureListener . Это позволяет вам обнаруживать многие вещи, а не только Tap и DoubleTap , это также будет поддерживать изменение размера и перетаскивание.

Обязательно откройте исходный код в VS2010 и взгляните на GestureSample.xaml вы, вероятно, могли бы просто перенести большую часть этого в свое приложение.

Комментарии:

1. Я использую GestureListener, но проблема в том, что эффекты перехода выполняются на изображениях, поэтому изображения не принимают никаких событий, поэтому я хочу знать, как остановить один переход, если на изображении начался другой переход.

Ответ №2:

Я предполагаю, что ваш код делегирования вызывает проблемы:

   transition.Completed  = delegate
            {
                transition.Stop();
            };
  

Я предполагаю, что среди всех переключений контекста потока событие Completed запускается, когда вы только собираетесь начать следующий переход изображения.

Есть несколько вещей, которые вы могли бы попробовать, чтобы помочь с этим:

  • определенно подписывайтесь на завершено только один раз за переход
  • попробуйте использовать отдельные экземпляры перехода для каждого фактического перехода
  • попробуйте защитить кнопку так, чтобы ее нельзя было нажать во время перехода
  • попробуйте остановить переход самостоятельно (они не должны повторяться?)
  • попробуйте реорганизовать логику перехода, чтобы она была не такой многопоточной (не уверен, что еще происходит в приложении — я понимаю, что это может быть не совсем возможно, если у вас происходит много других вещей)
  • попробуйте использовать изменения состояния VisualStateManager вместо этих созданных вручную переходов

Не пробуйте их все вместе 🙂

Конечно, мое предположение может быть ошибочным… это может быть что-то другое…

Комментарии:

1. Просто запутал вас еще больше — добавил второй возможный ответ — извините!

2. Доступна ли какая-либо ссылка на их пример кода для VisualStateManager

3. На самом деле я новичок на этой платформе и просто пытаюсь устранить ошибку.

Ответ №3:

Читая это снова … другая возможность заключается в том, что что-то рисуется поверх кнопки и что это фиксирует события касания.

Одним из основных предложений является:

  • избавьтесь от кода workerthread — вернитесь к простому коду пользовательского интерфейса
  • выполните простую отладку.Код строки записи в обработчике Button_Click

Используя это, вы узнаете, продолжает ли кнопка реагировать на события нажатия или произошло что-то более сложное. Мой опыт показывает, что обычно кнопки продолжают работать на уровне нажатия, теперь не имеет значения, сколько раз вы нажимаете на них — значит, что-то еще идет не так либо в самой логике нажатия, либо в чем-то еще, отображаемом поверх кнопки, предотвращая ее нажатие.

Комментарии:

1. Да, нажатие кнопки работает, и оно по-прежнему отлично меняет изображение. Но когда я нажимаю или дважды касаюсь изображения, это не работает, потому что переход происходит на изображении