Экран-заставка ожидая до потока заканчивается

19
задан Linus Caldwell 13 June 2013 в 21:08
поделиться

4 ответа

Следующее через 2 потока немного сбивает с толку, но я собираюсь взять удар и сказать это...

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

Для исправления этой проблемы я предложил бы, чтобы Вы использовали компонент BackGroundWorker для выполнения метода GetFromServer. Это выполнит тот метод в отдельном потоке и оставит поток формы свободным перекрасить себя.

1
ответ дан 30 November 2019 в 01:50
поделиться

Тот же вопрос, тот же ответ:

платформа.NET имеет превосходную встроенную поддержку экранов-заставок. Запустите новый проект WF, Проект + Добавляют Ссылку, выбирают 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();
    }
  }
}
82
ответ дан 30 November 2019 в 01:50
поделиться

Вы ввели опасную территорию путем создания UI до вызова к Приложению. Выполненный (). Приложение. Выполненный по существу насос сообщения Вашей программы. Путем отображения UI перед запуском насоса сообщения приложения Вы делаете типичное взаимодействие UI эффективно невозможным на преждевременном UI. Для экрана-заставки это не может казаться релевантным, но он будет иметь значение если (например). существует запрос, чтобы заставить экран-заставку исчезнуть, если на него нажимают, или Вы хотите использовать BackgroundWorker.

Они могут работаться вокруг путем создания насоса сообщения в экране-заставке (путем создания этого модальным через вызов к ShowDialog () вместо Шоу ()), но это лечит симптом, когда обработка проблемы действительно не является настолько трудной.

я сильно поощрил бы ответ nobugz в этом случае. Платформа оказывает поддержку, в которой Вы нуждаетесь. В то время как функции в Microsoft. Пространство имен VisualBasic является не всегда очень поддающимся обнаружению программистам C#, они могут быть реальным средством экономии времени и спасителем для случаев как это.

Удачи!

3
ответ дан 30 November 2019 в 01:50
поделиться

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

, Чтобы сделать это, Вы собираетесь хотеть переместиться эти GetFromServer() вызов к BackgroundWorker. Затем переместитесь

    this.Hide();
    _serverData = new ArrayList();
    _thisData.Add(_allServerNarrators);
    _thisData.Add(_serverNarrators);

код к BackgroundWorker_RunWorkerCompleted обработчик событий.

Для использования BackgroundWorker :

1) Инициализируют BackGroundWorker

  BackgroundWorker myWorker = new BackgroundWorker();

, 2) Добавляют, что обработчики событий

  myWorker.DoWork += new DoWorkEventHandler(myWorker_DoWork);
  //put the work you want done in this one

  myWorker.RunWorkerCompleted += 
      new RunWorkerCompletedEventHandler(myWorker_RunWorkerCompleted);
  //this gets fired when the work is finished

3) Добавляют код к обработчикам событий.

4) Вызов myWorker.RunWorkerAsync(), чтобы начать работать.

Как отдельное примечание, Вы, кажется, ничего не делаете с ArrayList, что Вы являетесь передающими конструктору экрана-заставки. Это предназначается?

1
ответ дан 30 November 2019 в 01:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: