Jak wywołać funkcję w BackgroundWorkerze [C#]

Cześć
Mam pytanko w jaki sposób (o ile wgl. mogę) wywołać funkcje aby działała w nowym wątku. To mega uproszczony przykład:
 

namespace ConsoleApplication3
{
    class Program
    {
        static void cos()
        {
            Console.Write(“Hello World”);
        }

        static void Main(string[] args)
        {
            cos();
        }
    }
}

I czy jest możliwość aby funkcja cos() była wykonana w nowym wątku

 

BackgroudWorker idzie powoli w zapomnienie.

Masz 3 opcje:

  1. Klasa Thread,
  2. Klasa ThreadPool
  3. Klasa Task

Każda z tych klas przy użyciu pozwala Ci na zdefiniowanie metody, która ma być wykonana w nowym wątku/zadaniu. Na początek polecam klasę Thread.

W Twoim przypadku, musisz jeszcze dodać coś, co poczeka na wykonanie oddzielnego wątku (AutoResetEvent, ManualResetEvent).

Taki przykład na przykład:

using System;

using System.Threading;



namespace ConsoleApplication3

{

    class Program

    {

        private static void cos()

        {

            // rób to co ma być wykonane w wątku

            Console.Write("Hello World");



            //sygnalizujemy, że wątek zrobił swoje

            resetEvent.Set();

        }



        private static AutoResetEvent resetEvent;



        private static void Main(string[] args)

        {

            resetEvent = new AutoResetEvent(false);



            // startujemy prosty wątek

            new Thread(new ThreadStart(cos));



            // Będę tu stał i czekał (na poniższej metodzie), dopóki w metodzie cos nie wykona się resetEvent.Set().

            resetEvent.WaitOne();

            // reszta kodu

        }

    }

}

 

Dzięki :slight_smile: 1 punkt załatwił sprawę