2012-05-21 101 views
0

一些背景...
我試圖給點擊按鈕時的視覺反饋...基本上是一個加載彈出消息(使用WPF彈出控件)。問題是...因爲我在UI線程上,並且在同步代碼中按鈕點擊和邏輯發生,彈出窗口出現。我希望彈出窗口顯示在點擊按鈕上,運行一些代碼,然後離開(在代碼運行時彈出窗口應該顯示)。WPF彈出窗口和UI線程

我意識到我可以用線程完成它,但那不是一個選項。我有時間限制,沒有時間來修復應用程序「正確的方式」。

之前,我這樣做是「正確的」正常呻吟聲...

  • 我沒有寫的應用程序,只是任務是努力提高性能(和/或知覺性能的)沒有完整的over-haul。
  • 在某些時候,我希望我可以重新使用這個應用程序,只有很少的調整現在會削減它。
  • 有沒有ViewModel ...代碼是真的,真的耦合到用戶界面。 (就像我說的,我沒有正確的應用程序)
  • 由於各種原因,我不能在這種情況下使用線程,而不是沒有打破太多的其他peices和我的時間限制。

那麼,有沒有辦法在這種情況下做到這一點(順便說一句...有沒有視圖模型,我不能創建一個現在監守的邏輯嚴密的UI耦合的)?



流行起來控制

<Popup Name="popLoading" Placement="Center"> 
      <Border CornerRadius="10" Background="#ffffff"> 
       <Grid Width="400" Height="200"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition/> 
         <ColumnDefinition/> 
        </Grid.ColumnDefinitions> 
        <Image Grid.Column="0" Name="imgLoading" Source="/foo/Images/loading.png" /> 
        <TextBlock Name="txtLoading" Text="Retreiving data..."/> 
       </Grid> 
      </Border> 
     </Popup>   

按鈕單擊

private void MyButton_Click(object sender, RoutedEventArgs e) 
    { 
     popLoading.IsOpen = true; 

     //Do Some Stuff hopefully popup is showing up on the screen. 

     popLoading.IsOpen = false; 

    } 
+0

什麼是如此艱難關於把一個線程上的邏輯,認真嗎? –

+0

@ H.B。在應用程序的其他部分發生了一些事情,導致同步問題。某些事情必須發生,以便線程中斷(我已經嘗試過),但不是那麼困難,它會花費太長時間。如果在這裏沒有任何快速解決方案,那麼我只會忘記彈出窗口,直到我真的可以修復該應用程序。 – AGoodDisplayName

+1

您可能可以使用['DispatcherFrames'](http://msdn.microsoft.com/zh-cn/library/system.windows.threading.dispatcherframe.aspx)... –

回答

1

難道真的繁重創建whateve一個background worker r長時間運行的進程正在關閉用戶界面?

我的WinForms使用另一種UI的竅門是有在底部的狀態欄,當東西加載一個會說(在天回來時,我會做的正是這個程序是做錯了)

+0

沒有它不麻煩,但上面的代碼是應用程序實際上在做什麼的一個小簡化版本。它不是一個長時間運行的進程問題,它更多的是數據同步問題,唯一的問題是我沒有時間用線程來做到這一點。太多其他事情在應用程序中停止正常工作。我真的只是想在這件事上做一個創可貼。 – AGoodDisplayName