Обновление макет Splash в одном уровне StanceApplicamation: WindowsFormSapplicationBase
-
10-10-2019 - |
Вопрос
Как лучше всего обновить метки 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.
Не связан с StackOverflow