Обнаружение событий касания в быстрой последовательности - PullRequest
0 голосов
/ 12 мая 2011

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

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

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...");

        }
    }

Ответы [ 3 ]

1 голос
/ 12 мая 2011

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

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

0 голосов
/ 12 мая 2011

Повторное чтение ... еще одна возможность - что-то рисуется поверх кнопки и захватывает события касания.

Одно основное предложение:

  • избавиться от кода рабочей нити - вернитесь к простому коду пользовательского интерфейса
  • поместите некоторый простой код Debug.WriteLine в обработчик Button_Click

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

0 голосов
/ 12 мая 2011

My думаю, означает, что ваш делегат вызывает проблемы:

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

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

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

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

Не пытайтесь все вместе:)

Конечно, мое предположение может быть неправильным ... это может быть что-то еще ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...