I still have a problem with the splash screen. I don’t want to use the property SC.TopMost=true.
Now my application scenario is as follows:
in progeram.cs:
[STAThread] static void Main() { new SplashScreen(_tempAL);// where _tempAL is an arrayList Application.Run(new Form1(_tempAL)); }
in SplashScreen class:
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++; } }
What I want is something in the splash screen class which waits until the thread finishes.
For more details, please tell me what I need to tell you.
Following across 2 threads is a bit confusing, but I’m going to take a stab and say this…
I don’t fully understand your design here, but if the issue is that when you launch a second application the splash screen form turns white… It’s most likely due to the fact that splash screen is busy executing all of that code in GetFromServer(). So busy that it has no time to re-paint itself.
To remedy this problem I would suggest that you use the BackGroundWorker component to execute the GetFromServer method. This will run that method in a separate thread and leave the form’s thread free to re-paint itself.