Я создал приложение с одним экземпляром, используя VisualBasic.dll, но бывают ситуации, когда мне нужно создать несколько экземпляров. Мне нужно было поведение одного экземпляра для обработки поведения контекстного меню, где каждая команда контекстного меню Windows будет вызывать новый экземпляр приложения. Мне все еще нужны некоторые контекстные меню для загрузки другого экземпляра. Я решил это, создав новый контекст приложения и запустив его в новом потоке.
Образец кода
var thread = new Thread(() => ThreadOpenFile(args));
thread.TrySetApartmentState(ApartmentState.STA);
thread.Start();
Содержание темы
private static void ThreadOpenFile(string[] args)
{
ApplicationContext appCnxt= new ApplicationContext(new newForm(args[1]));
Application.Run(appCnxt);
}
я такой же как
private static void ThreadOpenFile(string[] args)
{
Application.Run(new newForm(args[1]));
}
Это создаст новый ApplicationContext, ThreadContext и новую форму, а Application.Run свяжет ThreadContext с ApplicationContext. так же, как запуск нового приложения. Я не могу найти никакой документации, объясняющей, что происходит и кто управляет этой «новой темой», которую я создаю. Если я попытаюсь запустить новый процесс, он вызовет обработчик одного экземпляра
protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
VisualBasic.dll и навсегда погрузиться в рекурсивный цикл, как и ожидалось. Я хочу знать, правильный ли это подход или есть лучший способ?
Эта ссылка показывает, как использовать приложение context для перехвата поведения экрана-заставки. Если есть хорошие рекомендации, я могу найти, что внутренности также ценятся.