WPF

2013-03-24 3 views
16

में ऑपरेशन करने से पहले देरी कैसे करें I अगली विंडो में नेविगेट करने से पहले 2 सेकंड देरी करने के लिए नीचे दिए गए कोड का उपयोग करने का प्रयास किया। लेकिन धागा पहले आक्रमण कर रहा है और टेक्स्टब्लॉक को माइक्रोसेकंड के लिए प्रदर्शित किया जाता है और अगले पृष्ठ में उतरा जाता है। मैंने सुना एक प्रेषक ऐसा करेगा।WPF

tbkLabel.Text = "two mins delay"; 
Thread.Sleep(2000); 
Page2 _page2 = new Page2(); 
_page2.Show(); 
+0

एक DispatcherTimer

tbkLabel.Text = "two seconds delay"; var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(2) }; timer.Start(); timer.Tick += (sender, args) => { timer.Stop(); var page = new Page2(); page.Show(); }; 

विधि 2 का उपयोग क्यों "दो ** मिनट ** देरी?" –

उत्तर

56

Thread.Sleep करने के लिए कॉल यूआई धागा ब्लॉक कर रहा है:

यहाँ मेरी टुकड़ा है। आपको असीमित रूप से प्रतीक्षा करने की आवश्यकता है।

विधि 1: का उपयोग Task.Delay

tbkLabel.Text = "two seconds delay"; 

Task.Delay(2000).ContinueWith(_ => 
    { 
    var page = new Page2(); 
    page.Show(); 
    } 
); 

विधि 3:: .NET 4.5 रास्ता, उपयोग async/इंतजार

// we need to add the async keyword to the method signature 
public async void TheEnclosingMethod() 
{ 
    tbkLabel.Text = "two seconds delay"; 

    await Task.Delay(2000); 
    var page = new Page2(); 
    page.Show(); 
} 
+0

टाइमर टाइमर कई बार टिकने के मामले में नया पृष्ठ कई बार दिखा सकता है और ऐप पहले धीमे को संभालने में बहुत धीमा है। – usr

+3

@usr वास्तव में यह नहीं होगा। आंतरिक रूप से टाइमर एक शॉट है और टिक घटना को बढ़ाने के बाद पुनरारंभ किया जाता है। – Phil

+0

कौन जानता था ?! मैंने नहीं किया +1 – usr