BackgroundWorker.ReportProgress + istniejaca metoda

0

Witam
Mam długo wykonującą się metodę:

class LongMethodClass{
    public void longMethod(){
    }
}

W jaki sposób użyć klasy BackgroundWorker i metody ReportProgress bez ingerencji w klasę LongMethodClass?

0

Nie da się.

0

A jest jakiś inny sposób na raportowanie takiej metody??

0

Tylko stany "wykonane", "niewykonane". Ew. możesz obliczać czas wykonywania tej metody i podawać średnią wartość. No, ale to niezbyt dobry pomysł.

A dlaczego nie możesz zmodyfikować tamtej metody? Jest w jakiejś innej bibliotece? Jeżeli jest w miarę prosta i jej licencja na to pozwala, możesz zdekompilować Reflectorem kod tej metody i przenieść jej ciało do własnej, z dodaną obsługą raportowania jej stanu.

0

Chcesz użyć wielowątkowości bez żadnych zmian. Nie ma tak łatwo ;)
Ale z drugiej strony nie ma też w tym nic trudnego.
Zobacz przykładową klasę:

        public class Slave : BackgroundWorker
        {
            protected override void OnDoWork(DoWorkEventArgs e)
            {
                base.OnDoWork(e);
                LongMethod();
            }

            private void LongMethod()
            {
                for (int i = 0; i < 100; i++)
                {
                    for (int j = 0; j < 100; j++)
                    {
                        //work
                    }
                    ReportProgress(i);
                }
            }
        }

Tworzysz potem instancję klasy, odpalasz i tylko czekasz aż się wykona ;)

0

Ale chodzi przecież o to, żeby nie modyfikować metody LongMethod, nie możesz umieścić tam żadnego ReportProgress.

0

No tak - masz rację. Jeśli na pewno nie może jej zmodyfikować, to nie da się w łatwy sposób raportować postępu. Ale może bez problemu uruchomić ją w tle. ;)

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