2011-05-12 83 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