2011-10-16 6 views
5

मैं प्रिज्म आधारित WPF एप्लिकेशन में .NET 4 स्प्लैशस्क्रीन का उपयोग करने का प्रयास कर रहा हूं। मैंने स्प्लैशस्क्रीन पर छवि पर बिल्ड एक्शन सेट करके स्पैशस्क्रीन का उपयोग किया है।एक WPF प्रिज्म आधारित एप्लिकेशन में .NET 4 SplashScreen का उपयोग कैसे करें?

एप्लिकेशन System.Resources.MissingManifestResourceException के साथ क्रैश होने पर प्रयुक्त होता था। अंततः मुझे पता चला कि अगर मैं App.Xaml फ़ाइल में StartupUri = "MainWindow.xaml" जोड़ता हूं, तो स्पलैशस्क्रीन ठीक काम करता है।

<Application x:Class="Application" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     StartupUri="MainWindow.xaml"> 
</Application> 

लेकिन प्रिज्म एप्लिकेशन में, हमारे पास स्टार्टअप यूरी नहीं हो सकती है। सब कुछ बूटस्ट्रैपर में किया जाता है।

तो मुझे स्प्लैशस्क्रीन को काम करने के लिए स्टार्टअपयूरी ने मैन्युअल रूप से क्या करने की आवश्यकता है?

अद्यतन 1: पूरा अपवाद संदेश है:

System.Resources.MissingManifestResourceException बिना क्रिया

संदेश था = किसी भी संसाधन निर्दिष्ट संस्कृति या तटस्थ संस्कृति के लिए उपयुक्त नहीं मिल सका। सुनिश्चित करें कि "Application.g.resources" को संकलित समय पर असेंबली "एप्लिकेशन" में सही ढंग से एम्बेड या लिंक किया गया था, या सभी सैटेलाइट असेंबली आवश्यक हैं जो लोड करने योग्य और पूरी तरह से हस्ताक्षरित हैं।

अद्यतन 2: मैं पता लगा है जोड़ने या हटाने के StartupUri फर्क नहीं पड़ता। क्या मायने रखता है कि मेरे पास अतिरिक्त WPF विंडो (App.xaml के अलावा) या ऐप में 2 डमी प्रविष्टियां हैं। स्रोत टैग।

<Application.Resources> 
    <Style x:Key="Dummy"/> 
    <Style x:Key="Dummy1"/> 
</Application.Resources> 

मैं ऐसा नहीं करते हैं, तो Application.g.resources फ़ाइल obj फ़ाइल में नहीं बनाया जाता है और इसलिए निष्पादन में एम्बेड नहीं। दो डमी संसाधन प्रविष्टियों को जोड़कर इस blog post द्वारा मेरे ध्यान में लाया गया था।

अद्यतन 3:

मेरा प्रश्न MSDN मंच here पर बॉब बाओ द्वारा उत्तर दिया गया था। ऐसा लगता है कि केंट एक ही दिशा में मुझे इंगित करने की कोशिश कर रहा था।

छवि के निर्माण कार्य को स्पलैशस्क्रीन पर सेट न करें। इसके बजाय:

के रूप में अनुप्रयोग OnStartup विधि में कोड जोड़ें:

protected override void OnStartup(StartupEventArgs e) 
{ 
    SplashScreen splashScreen = new SplashScreen("splashscreen.png"); 
    splashScreen.Show(true); 

    base.OnStartup(e); 
    Bootstrapper bootstrapper = new Bootstrapper(); 
    bootstrapper.Run(); 
} 

"splashscreen.png" परियोजना में एक छवि है, और उसके "कार्रवाई बिल्ड" "संसाधन" है।

+2

के साथ एक पूर्ण उदाहरण है वहाँ एक सवाल यहीं कहीं में है? – DeCaf

+0

@DeCaf मैंने प्रश्न अपडेट किया है। –

उत्तर

1

बस अपना खुद का प्रवेश बिंदु परिभाषित करें जो सबसे पहले स्प्लैश स्क्रीन दिखाता है और फिर प्रिज्म बूटस्ट्रैप्स दिखाता है। अपनी प्रोजेक्ट गुणों में, एंट्री पॉइंट को अपने कस्टम एंट्री पॉइंट पर सेट करें।

internal static class Entry 
{ 
    public static void Main(string[] args) 
    { 
     var splashScreen = ...; 
     splashScreen.Show(); 

     var bootstrapper = ...; 
     bootstrapper....; 
    } 
} 
+0

समस्या प्रविष्टि बिंदु को परिभाषित करने के बारे में नहीं है। डब्ल्यूपीएफ स्वचालित रूप से एक स्थिर मुख्य() बनाता है जो एक स्पलैशस्क्रीन बनाता है और फिर ऐप() लॉन्च करता है जिसमें मैं अपना बूटस्ट्रैपर बना देता हूं। समस्या यह है कि अगर मैं स्टार्टअपयूरी निर्दिष्ट नहीं करता हूं, तो किसी कारण से स्पेश स्क्रीन के लिए छवि जो संसाधन के रूप में एम्बेडेड है, स्पलैशस्क्रीन उदाहरण के लिए उपलब्ध नहीं है। इसलिए मेरा प्रश्न: स्टार्टअप यूरी टैग ने मैन्युअल रूप से मुझे क्या करना चाहिए? –

+0

क्या आपकी स्प्लैश छवि गुणों पर 'बिल्ड एक्शन *' संसाधन 'पर सेट है? –

+0

बूगार्ट नंबर बिल्ड बिल्ड स्प्लैश स्क्रीन पर सेट है। –

संबंधित मुद्दे