Потеря ссылки на объект при доступе к данным из другого потока

Тот же вопрос, тот же ответ:

.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();
    }
  }
}
1
задан Tom 23 February 2019 в 18:05
поделиться

1 ответ

Объявите переменную final:

final ITraceable m_traceable;

Это гарантирует, что все потоки увидят присвоенное значение (при условии, что ссылка на this небезопасно опубликована в конструкторе, которого здесь нет) .

0
ответ дан Andy Turner 23 February 2019 в 18:05
поделиться
Другие вопросы по тегам:

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