public void ProcessHasExit(AccountWatcherThread Thread, bool UserCall = false) { try { if (Thread.Account.DiabloIII != null) { Thread.Account.DiabloIII.Dispose(); } GManager.GThread.Threads.Remove(Thread); GManager.GThread.HasThreads = GManager.GThread.Threads.Count > 0; if (!GManager.GThread.HasThreads)// All has exit { GManager.GThread.ExitThread.Set(); if (!UserCall) // All Diablo exited, not called by user { Extensions.Execute.UIThread(() => { // MainWindow.Window.LoadPageIntoMain(typeof(Stop)); Templates.Templating.BasicEvents.TryBringBack(); }); } } } catch (Exception e) { Extensions.Execute.UIThread(() => { // MessageBox.Show(e.ToString()); }); } }
public void CreateThread() { lock (new object()) { try { new Thread(() => { foreach (GameManagerAccounts Account in Accounts) { List <Action> GUpdate = new List <Action>(); if (Account.MainAccount && !Config.Get <FKConfig>().General.FKSettings.UseOverlayInGame) { GUpdate.Add(GManager.GRef.Actors.Enumerate); } else if (!Account.MainAccount) { GUpdate.Add(GManager.GRef.Actors.EnumerateMultibox); } AccountWatcherThread Thread = new AccountWatcherThread(Account, GUpdate); GManager.GThread.Threads.Add(Thread); } GManager.GThread.ExitThread.WaitOne(); }).Start(); } catch (Exception e) { Extensions.Execute.UIThread(() => MessageBox.Show(e.ToString())); } } }