Исключение прерывания потока происходит случайным образом
Привет,
Я работаю над плагином excel, когда мне нужно показать спиннер, пока какая-то операция не произойдет в фоновом режиме. Я выбрал подход, при котором я поместил изображение spinner(gif) в другую форму windows и вызвал его в отдельном потоке. Как только операция будет завершена, я прерву этот поток, который запускает форму spinner.
Это дает исключение прерывания потока случайным образом.
Что я уже пробовал:
Here is my code: Spinner form: <pre>public partial class LoadingScreen : Form { private LoadingScreen _loadingScreen = null; private Thread oThread = null; public LoadingScreen() { InitializeComponent(); } public LoadingScreen(bool showloading) { InitializeComponent(); ShowLoadingScreen(); } public void FocusLoading() { if (_loadingScreen == null) ShowLoadingScreen(); if (oThread != null) { this.Activate(); } } private void ShowFormOpacity() { _loadingScreen = new LoadingScreen(); _loadingScreen.Opacity = .75; _loadingScreen.Controls["lblLoading"].Visible = false; if (_loadingScreen != null) Application.Run(_loadingScreen); } public void CloseFormInstance() { if (oThread != null) { try { _loadingScreen = null; oThread.Abort(); oThread.Join(); } catch (Exception ex) { } } } public void ShowLoadingScreen() { if (_loadingScreen != null) return; oThread = new Thread(new ThreadStart(ShowFormOpacity)); oThread.IsBackground = false; oThread.SetApartmentState(ApartmentState.STA); oThread.Start(); while (_loadingScreen == null || _loadingScreen.IsHandleCreated == false) { System.Threading.Thread.Sleep(50); } } }
Позвонив в форме обтекателя из класса thisaddin.в CS
private LoadingScreen screen;
public void LoadingScreen(bool showloading) { if (screen != null) { screen.FocusLoading(); } else { screen = new LoadingScreen(showloading); } } public void CloseFormInstance() { if (screen != null) { screen.CloseFormInstance(); } }
Почему иногда происходит исключение прерывания потока?