Следующее через 2 потока немного сбивает с толку, но я собираюсь взять удар и сказать это...
я не полностью понимаю Ваш дизайн здесь, но если проблема - то, что при запуске второго приложения, форма экрана-заставки бледнеет... Это наиболее вероятно вследствие того, что экран-заставка занят, выполняя весь тот код в GetFromServer (). Столь занятый, что у этого нет времени перекрашивать себя.
Для исправления этой проблемы я предложил бы, чтобы Вы использовали компонент BackGroundWorker для выполнения метода GetFromServer. Это выполнит тот метод в отдельном потоке и оставит поток формы свободным перекрасить себя.
Тот же вопрос, тот же ответ:
платформа.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();
}
}
}
Вы ввели опасную территорию путем создания UI до вызова к Приложению. Выполненный (). Приложение. Выполненный по существу насос сообщения Вашей программы. Путем отображения UI перед запуском насоса сообщения приложения Вы делаете типичное взаимодействие UI эффективно невозможным на преждевременном UI. Для экрана-заставки это не может казаться релевантным, но он будет иметь значение если (например). существует запрос, чтобы заставить экран-заставку исчезнуть, если на него нажимают, или Вы хотите использовать BackgroundWorker.
Они могут работаться вокруг путем создания насоса сообщения в экране-заставке (путем создания этого модальным через вызов к ShowDialog () вместо Шоу ()), но это лечит симптом, когда обработка проблемы действительно не является настолько трудной.
я сильно поощрил бы ответ nobugz в этом случае. Платформа оказывает поддержку, в которой Вы нуждаетесь. В то время как функции в Microsoft. Пространство имен VisualBasic является не всегда очень поддающимся обнаружению программистам C#, они могут быть реальным средством экономии времени и спасителем для случаев как это.
Удачи!
Действительно необходимо предоставить больше подробную информацию о проблеме. Я мог быть абсолютно неправым, но я собираюсь взять выстрел в темноте. Из того, что я воображаю, продолжается, и Вы хотите, Вы хотите, чтобы экран-заставка показал, сделал некоторую обработку в другом потоке, затем экран-заставка, чтобы уйти по окончании.
, Чтобы сделать это, Вы собираетесь хотеть переместиться эти 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
, что Вы являетесь передающими конструктору экрана-заставки. Это предназначается?