2011-05-12 96 views
0

我有一个显示大量图像或按钮之一的页面。点击按钮后,我将其隐藏并显示列表中的下一个图像。点击图像使其消失并再次显示该按钮。快速连续检测点击事件

当连续多次单击按钮时,显示的图像不会响应被点击。我想这是由于UI线程阻塞,但我尝试与工作线程,并仍然无法正常工作。

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

     } 
    } 
+4

你可以改善这个标题所以它的问题? – Stuart 2011-05-12 10:43:50

+0

你在图像上订阅了哪些事件? – 2011-05-12 10:45:41

+0

你可以请示出一些代码,它演示你正在做什么,并允许我们重新创建问题。 – 2011-05-12 10:58:57

回答

0

猜测是,你委托的代码导致的问题:

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

我的猜测是,在所有的线程上下文切换完成事件被解雇了,而你只是开始下一个图像转换。

有一些事情你可以尝试,以帮助这一点:

  • 绝对只订阅完成每过渡一次
  • 尝试使用不同的过渡情况下,每个实际过渡
  • 试图保护按钮以便在转换发生时不能按下
  • 尝试让转换自行停止(它们不必重复?)
  • 尝试重组转换逻辑,以便它不那么多线程(不知道该应用程序还在发生什么 - 我知道这可能不是完全可能的,如果你有很多其他事情正在进行)
  • 尝试使用VisualStateManager状态变化的,而不是这些手工制作的过渡

不要他们一起:)

当然,我猜测可能是错误的......它可能是别的东西......

+0

Thnx您的回答。 – 2011-05-12 11:36:02

+0

只是现在更令你困惑 - 已经添加了第二个可能的答案 - 抱歉! – Stuart 2011-05-12 11:42:18

+0

他们的VisualStateManager的任何示例代码链接可用 – 2011-05-12 11:44:06

1

我建议您安装Codeplex的Windows Phone Toolkit并使用GestureListener。这可以让你检测许多东西,不仅仅是TapDoubleTap,它还支持捏尺寸和拖动。

请确保在VS2010中打开源代码并查看GestureSample.xaml,您可能只需将大部分代码提取到您的应用中。

+0

我正在使用GestureListener,但问题是过渡效果正在对图像进行这是为什么图像没有采取任何事件,所以我想知道如何停止一个过渡,如果另一个转换开始在图像上。 – 2011-05-12 11:43:28

0

再读一遍......另一种可能性是,在按钮顶部绘制了一些东西,这是捕捉触摸事件。

一个基本建议是:

  • 摆脱的WorkerThread代码 - 再回到刚才的UI代码
  • 把一些简单的Debug.WriteLine代码在Button_Click处理

使用此会告诉你Button是否仍然响应点击事件或是否发生了更复杂的事件。我的经验是,通常Button现在在点击级别上继续工作,不管你点击它多少次 - 所以在点击逻辑本身或者在按钮顶部显示的其他内容中出现了其他问题,从而阻止了它从被点击。

+0

是按钮点击正在工作,它仍然完全改变图像。但是当我点击或双击图像它不工作,因为过渡正在图像上 – 2011-05-12 11:46:25