Обновление макет Splash в одном уровне StanceApplicamation: WindowsFormSapplicationBase

StackOverflow https://stackoverflow.com/questions/4461853

Вопрос

Как лучше всего обновить метки Splash Sceen для запуска приложений, чтобы сообщить пользователю, что происходит? Проблема заключается в том, что брызговой экран создается методом переопределения, в то время как обновление должно быть сделано в статическом основном методе, который не может получить доступ «this.splashscreen».

class SingleInstanceApplication : WindowsFormsApplicationBase
{
    [STAThread]
    static void Main(string[] args)
    {
        SetSplashInfo("Data configuration", "Applying DataDirectory"); 
        //Can't be done, this method is static**
        //Do some stuff, code removed for reading purposes
    }

    protected override void OnCreateSplashScreen()
    {
        this.SplashScreen = new TestSplash();
        this.SplashScreen.TopMost = true; 

        base.OnCreateSplashScreen();
    }

    private void SetSplashInfo(string txt1, string txt2)
    {
        if (  this.SplashScreen == null)
            return;
       TestSplash splashFrm = (TestSplash)this.SplashScreen;
        splashFrm.label1.Text = txt1;
        splashFrm.label2.Text = txt2;
    }
}
Это было полезно?

Решение

Да, вам нужна ссылка на объект SingleInStanceApplicamation. Поскольку есть только один из них, вы можете обмануть:

class SingleInstanceApplication : WindowsFormsApplicationBase {
    private static SingleInstanceApplication instance;
    public SingleInstanceApplication() {
       instance = this;
    }
}

Теперь вы можете использовать exants.splashscreen, чтобы всегда получить ссылку на экран брызги и сделать SetSplashinfo () статичным. Чистое исправление должно быть возможно, но я не вижу, как вы создаете экземпляр SingleInstanceApplication.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top