Добавьте заголовки управления кэшем в ваши HTML-файлы, чтобы они каждый раз загружались с сервера:
<header>
<meta http-equiv="expires" content="0">
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
...
</header>
Затем добавляйте случайные хэши к именам файлов сценариев каждый раз, когда вы делаете новую версию, чтобы убедиться, что они не загружается из кеша:
<script src="./app.2tvsgggce45pwlhe.js" type="text/javascript"></script>
После двух потоков немного запутанно, но я собираюсь взять удар и сказать это ...
Я не совсем понимаю ваш дизайн здесь, но если проблема в том, что при запуске второго приложения форма экрана заставки становится белой ... Скорее всего, это связано с тем, что заставка заполнена, выполняя весь этот код в GetFromServer (). Настолько занят, что у него нет времени, чтобы перекрасить себя.
Чтобы исправить эту проблему, я предлагаю вам использовать компонент BackGroundWorker для выполнения метода GetFromServer. Это будет запускать этот метод в отдельном потоке и оставить поток формы без повторной кражи.
К сожалению, у меня недостаточно репутации, чтобы прокомментировать какой-то ответ. :( Это должно быть ответом на комментарий полковника Паники к Ханс Пассанс, отвечающий на .
Его проблема заключалась в том, что после new FormMain(args)
будет отображаться MessageBox
заставка. Ключ должен вызывать MessageBox из потока, за которым запускается заставка:
splashScreen.Invoke(new Action(() => {
MessageBox.Show(splashScreen, "the message");
}));
Где splashScreen
- ссылка на объект заставки, который был создан в OnCreateSplashScreen
и очевидно, должен быть дан новому объекту Form1
.
Тот же вопрос, тот же ответ:
.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();
}
}
}
new FormMain(args)
показывает окно сообщения, он откроет заставку за i>. @Hans Passant вы знаете, что исправить? Не говорите «сделать конструктор проще» - если бы я мог исправить то, что мне не нужен всплеск экрана!
– Colonel Panic
1 August 2013 в 10:34
Вы действительно должны дать более подробную информацию о своей проблеме. Я мог быть совершенно неправ, но я сделаю снимок в темноте. Из того, что я представляю, происходит, и вы хотите, вы хотите, чтобы экран заставки отображался, выполнял некоторую обработку в другом потоке, затем экран заставки исчезнет, когда закончите.
Чтобы сделать это, вы 'захочет переместить вызов 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
, который вы передаете конструктору заставки. Это предназначено?