проблема с заставкой - C # - VS2005 - PullRequest
1 голос
/ 25 декабря 2008

У меня есть приложение.

Сначала я отображаю заставку, форму, и эта заставка вызывает другую форму.

Проблема: при отображении формы-заставки, если я затем открою другое приложение в верхней части заставки и затем сверну это вновь открытое окно приложения, заставка станет белой. Как мне избежать этого? Я хочу, чтобы мой всплеск отображался четко и не зависел ни от какого приложения.

Ответы [ 3 ]

5 голосов
/ 25 декабря 2008

Вам необходимо отобразить заставку в другом потоке - в настоящее время ваш новый код загрузки формы блокирует поток пользовательского интерфейса заставки.

Начните новую тему, и в этой теме создайте заставку и позвоните Application.Run(splash). Это запустит новый насос сообщений в этой теме. Затем вам нужно будет заставить ваш основной поток пользовательского интерфейса перезвонить потоку пользовательского интерфейса заставки (например, с помощью Control.Invoke / BeginInvoke), когда он будет готов, чтобы заставка могла закрыться сама.

Важно убедиться, что вы не пытаетесь изменить элемент управления пользовательского интерфейса из неправильного потока - используйте только тот элемент, на котором был создан элемент управления.

3 голосов
/ 26 декабря 2008

.NET Framework имеет отличную встроенную поддержку для заставок. Запустите новый проект WF, Project + Add Reference, выберите Microsoft.VisualBasic. Добавьте новую форму, назовите ее frmSplash. Откройте Project.cs и сделайте так:

using System;
using System.Windows.Forms;
using Microsoft.VisualBasic.ApplicationServices;

namespace WindowsFormsApplication1 {
  static class Program {
    [STAThread]
    static void Main(string[] args) {
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      new MyApp().Run(args);
    }
  }
  class MyApp : WindowsFormsApplicationBase {
    protected override void OnCreateSplashScreen() {
      this.SplashScreen = new frmSplash();
    }
    protected override void OnCreateMainForm() {
      // Do your time consuming stuff here...
      //...
      System.Threading.Thread.Sleep(3000);
      // Then create the main form, the splash screen will close automatically
      this.MainForm = new Form1();
    }
  }
}
1 голос
/ 26 декабря 2008

У меня была похожая проблема, которую вы могли бы проверить. Ответ Переполнение стека Я отлично сработал - возможно, вы захотите взглянуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...