C# Komunikacja miedzy klasami i wątkami

0

Witam uczę się programowanie w C# używam środowiska programistycznego „Microsoft Visual Studio Express 2013 for Windows Desktop”. Nie mogę sobie poradzić z wielowątkowością i klasami. Nie umiem wysyłać wiadomości między nimi. Próbowałem różnych rzeczy z poradników i tutoriali ale nic mi nie wychodzi. Mam dwa problemy z którymi nie mogę sobie poradzić, nie wiem jak je rozwiązać.

  1. Chcę wypisać komunikaty z nowej klasy uruchomionej w oddzielnym wątku w textbox w głównym wątku na formie.
  2. Jak zrobić licznik wątków z numerem wątku ?. Chce żeby podczas uruchamiania kolejnej klasy automatycznie licznik zwiększał wartość o jeden a w klasie był przechowywany numer wątku – indeks. Automatycznie jak wątek się zakończy to licznik ma się zmniejszyć.
    Próbowałem to zrobić na wiele sposobów ale nic mi nie wychodzi. Po dwóch dniach szukania i próbowanie mam dość. Mógł by mi ktoś pokazać jak to zrobić na tym szkielecie ?
 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace watektest
{
    public partial class Form1 : Form
    {
        int liczbaWatkow = 0;
        watek nowaKlasa1 = null;
        watek nowaKlasa2 = null;       

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {           
            nowaKlasa1 = new watek("jakis tekst");
            nowaKlasa2 = new watek("jakis tekst");
        }

        public void dodajWiadomosc(string tekst)
        {
            textBox1.Text += textBox1 + Environment.NewLine;
        }    

        private void button2_Click(object sender, EventArgs e)
        {
            nowaKlasa1.ustawWiadomosc("jakis tekst 2");
        }
    }
}
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace watektest
{
    class watek
    {
        int numerWatku = -1;
        int licznik = 1000;
        private string tekst;

        public watek(string wiadomosc)
        {
            tekst = wiadomosc;
            wykonuj();
        }

        public void ustawWiadomosc(string wiadomosc)
        {
            tekst = wiadomosc;
        }

        public void wyslijWiadomosc(string tekst)
        {
            //Form1.dodajWiadomosc(tekst);
        }

        public void wykonuj()
        {
            while (licznik>0)
            {
                licznik--;
                wyslijWiadomosc("watek: " + numerWatku.ToString() + ", licznik: " + licznik.ToString() + ", wiadomosc: " + tekst);               
            }
            wyslijWiadomosc("koniec Watku: " + numerWatku.ToString());
        }
   }
}
0

Wróć do pisania w konsoli bo masz problemy z totalnymi podstawami.

I tak btw. to tutaj nie ma żadnych wątków.

0

Dzięki ale to mi nie pomoże. Nie wiem czy opisałem dość jasno mój problem. Dałem czysty przykład żeby ktoś mi pokazał poprawnie jak uruchomić wątek na klasie i przesłać z niego informację do głównego wątku. Nie chciałem zaśmiecać kodu moimi wypocinami bo nie działają. Wiem że zacząłem naukę programowanie i c# używam około 2-3 miesięcy. Co mi da pisanie w konsoli, jak to i tak nie rozwiązuje moich problemów. Jeśli chodzi o uruchomienie wątków na tych klasach to ja to robiłem tak:

        {  
            nowaKlasa1 = new watek("jakis tekst");
            Thread thr = new Thread(nowaKlasa1.wykonuj);
            thr.Start();

            nowaKlasa2 = new watek("jakis tekst");
            Thread thr2 = new Thread(nowaKlasa1.wykonuj);
            thr2.Start();
        }

ale nie wiem czy tak można uruchomić te klasy żeby to zadziałało jak należy.
Możesz mi udzielić jakiś konkretnych rad co mi coś pomoże ? „masz problemy z totalnymi podstawami” możesz mi podać jakieś przykłady, bardziej to sprecyzować ?

Możesz podać jakieś linki do konkretnych opisów, kursów, przykładów które poruszają zagadnienie klas, wątków i wymiany informacji miedzy nimi ?

0
Adam16 napisał(a):

Co mi da pisanie w konsoli, jak to i tak nie rozwiązuje moich problemów.

Nauczy cię języka. Branie się za pisanie aplikacji okienkowych podczas gdy masz problemy z podstawami to kiepski pomysł.

Adam16 napisał(a):

„masz problemy z totalnymi podstawami” możesz mi podać jakieś przykłady, bardziej to sprecyzować ?

Nie wiesz co to zmienne statyczne.
Używanie gołego Thread w czasach gdy mamy C# 6.0 to słaby pomysł. Poczytaj o TPL.
http://stackoverflow.com/questions/661561/how-to-update-the-gui-from-another-thread-in-c
http://stackoverflow.com/questions/9602567/how-to-update-ui-from-another-thread-running-in-another-class
Poczytaj o konwencji nazewnictwa w C# -> http://www.dofactory.com/reference/csharp-coding-standards

Adam16 napisał(a):

nie wiem czy tak można uruchomić te klasy żeby to zadziałało jak należy.

Żeby działało poprawnie to nie, bo w konstruktorze wywołujesz metodę wykonaj.

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