我仍然对启动屏幕有问题。我不想使用该物业SC.TopMost=true。
SC.TopMost=true
现在我的应用场景如下:
在progeram.cs中:
[STAThread] static void Main() { new SplashScreen(_tempAL);// where _tempAL is an arrayList Application.Run(new Form1(_tempAL)); }
在SplashScreen类中:
public SplashScreen(ArrayList _Data) { DisplaySplash() } private void DisplaySplash() { this.Show(); this.TopMost = true; this.CenterToScreen(); this.SetTopLevel(true); _allServerNarrators = new string[10]; for (int i = 0; i < _allServerNarrators.Length; i++) _allServerNarrators[i] = null; GetFromServer(); this.Hide(); _serverData = new ArrayList(); _thisData.Add(_allServerNarrators); _thisData.Add(_serverNarrators); } private void GetFromServer() { _serverNarrators = new ArrayList(); string _file = "Suras.serverNar"; if (!Directory.Exists("c:\\ASGAQuraan")) Directory.CreateDirectory("c:\\ASGAQuraan"); while (counter < 4 && _serverFiles == null) { if (Download("c:\\ASGAQuraan", _ftpServerIP, _file)) { StreamReader _strReader = new StreamReader ("c:\\ASGAQuraan\\"+_file,System.Text.Encoding.Default); string _line = _strReader.ReadLine(); string _word; while (true) { while (_line != null) { _word = _line.Substring(0, _line.IndexOf("*")); int _narId = Convert.ToInt32(_word); _line = _line.Substring(2); int k = 0; _serverNarratorNode = new ArrayList(); while (true) { int ind = _line.IndexOf("*"); if (ind > 0 && ind < _line.Length) { string str = _line.Substring(0, (ind)); if (k == 0) { _allServerNarrators[_narId] = str; _serverNarratorNode.Add(str); } else { _serverNarratorNode.Add(str); } _line = _line.Substring(ind + 1); k++; } else { _line = null; break; } } _serverNarrators.Add(_serverNarratorNode); _serverFiles = "added"; } _line = _strReader.ReadLine(); if (_line == null) { break; } } } else counter++; } }
我想要的是启动画面类中的东西,它等待线程完成。
有关更多详细信息,请告诉我我需要告诉您的内容。
跟踪2个线程有点令人困惑,但是我要刺一句说一下…
我在这里不完全了解您的设计,但是如果问题在于启动第二个应用程序时,初始屏幕形式变成白色……最有可能是由于初始屏幕正在忙于执行GetFromServer中的所有代码的事实()。太忙了,以至于没有时间重新绘制自身。
要解决此问题,我建议您使用BackGroundWorker组件执行GetFromServer方法。这将在一个单独的线程中运行该方法,并使窗体的线程可以自由重绘。