Problem z sygnalizacją "zajętości" aplikacji,odcią

0

Witam

Napisałem program który między innymi robi wiele operacji w tle, wymyśliłem sobie że owe operacje będzie sygnalizowała odpalona w osobnym wątku formatka, bez żadnej ramki, jedynie animowany gif i informacja o rodzaju operacji. Póki testy robiłem na moim głównym kompie (c2d @1,86GHz) wyglądało na to że wszystko działa na tyle sprawnie że można to zaakceptować.

jednak gdy przystąpiłem do testów na starszym kompie (athlon 1.2 FSB266) okazało się że owa wspaniała wydajność jest między innymi zasługą dwóch rdzeni, wykonanie tych samych operacji na starszym kompie trwa wieki, i widać że wątek główny aplikacji, przeszkadza wątkowi z formatka informacyjna, gdyz gif ma spore trudności żeby być animowanym w sposób płynny

Licze na jakąs podpowiedź lub może link to jakiegoś art-a co traktował by o radzeniu sobie zproblemami tego typu

obecnie kod wygląda następująco, mam jeszcze z nim taki problem że czasami dostaje komunikat "thread is already aborted" i nie wiem jak to zachwycić żeby tego błędu nie było

	public static bool alreadyBusy = false;
        public static BusyIndicator bi = new BusyIndicator("");
        public static Thread backgroundOpertionThread;

        public static void showBusy(bool isBusy, System.Windows.Forms.Form hostform, string message)
        {
            Common.busyMessage = message;
            if (isBusy)
            {
                Common.alreadyBusy = true;
                backgroundOpertionThread = new Thread(new ThreadStart(showBusy));
                Thread.Sleep(500);
                if (hostform != null)
                {
                    hostform.Enabled = false;
                    hostform.SuspendLayout();
                }
                backgroundOpertionThread.Start();

            }
            else
            {

                backgroundOpertionThread.Abort();
                Thread.Sleep(500);
                Common.alreadyBusy = false;
                if (hostform != null)
                {
                    hostform.Enabled = true;
                    hostform.ResumeLayout();
                }
            }
        }

        public static void showBusy()
        {
            BusyIndicator bir = new BusyIndicator(Common.busyMessage);
            bir.ShowDialog();
        }

pozdrawiam MTH

0
morethanchaos napisał(a)

widać że wątek główny aplikacji, przeszkadza wątkowi z formatka informacyjna, gdyz gif ma spore trudności żeby być animowanym w sposób płynny

Może należy pobawić się priorytetami wątków?

morethanchaos napisał(a)

obecnie kod wygląda następująco, mam jeszcze z nim taki problem że czasami dostaje komunikat "thread is already aborted" i nie wiem jak to zachwycić żeby tego błędu nie było

Nad czym chcesz się zachwycać? :)
Sprawdzaj może jaki jest status wątku (czy jest Running) zanim go przerwiesz.

P.S. A nie możesz użyć BackgroundWorkera i ProgressBara?

1 użytkowników online, w tym zalogowanych: 0, gości: 1