Мои свойства агентов Scala должны быть отмечены @volatile?

Это кажется глючным.

Я обычно ничего не помещаю в Main(), я позволяю no-arg app.Run() вызываться и вызывать все, что мне нужно, в методе OnStartup, но это не изменит поведение, которое вы видите .

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

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    // show splash
    var thread = new Thread(() =>
    {
        Dispatcher.CurrentDispatcher.BeginInvoke
            ((Action)(() => new MySplashWindow().Show()));
        Dispatcher.Run();
    }
    thread.SetApartmentState(ApartmentState.STA);
    thread.IsBackground = true;
    thread.Start();

    // run configuration steps

    // instantiate and show main window
}

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

Может быть, это помогает в вашем случае; возможно нет - просто мысль.

7
задан oxbow_lakes 23 June 2009 в 08:21
поделиться

1 ответ

Вам не нужно отмечать их как изменчивые. Выполнение вашего кода не находится внутри синхронизированного блока, но актер всегда будет проходить через него до того, как ваш код будет вызван, тем самым принудительно переводя память в согласованное состояние между потоками.

6
ответ дан 7 December 2019 в 10:06
поделиться
Другие вопросы по тегам:

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