Pętla w nowym wątku

0

Witam, mam w swoim programie Handler który reaguje na dane odbierane z portu szeregowego. W obsłudze kliknięcia pobierz chciałbym sprawdzić czy liczba pobranych danych jest już wystarczająca (zdefiniowana przez użytkownika). Nie mogę dać w obsłudze pętli while ponieważ zatrzymuje ona ykonywanie się Handlera. Jak zrealizować obsługe przycisku by było ok?
Zmienne pobrano i rozmiar_transmisji zostały zdefiniowane globalnie

0

KOD!

0

Zmienne pobrano i rozmiar_transmisji zostały zdefiniowane globalnie

Chyba chciałeś zamieścić kod ale zapomniałeś

0
 private void bDownload_Click(object sender, EventArgs e)
        {
            if (port.IsOpen)
            {
                    int spr = 0;    //wartość zmiennej 1 - nie wybrano rozszerzenia pliku
                    string tekst = "Czy chcesz pobrać: \nIlość danych: " +(tbAmount.Value*tbPartSize.Value)+cbPartSize.Text+ "\nw paczkach: " + tbPartSize.Value + cbPartSize.Text +
                        "\nIlość paczek: " + tbAmount.Value + "\n\nUstawienia portu:\n" + "port: " + port.PortName + "\nPrędkość: " + port.BaudRate + "\nBity danych: " + port.DataBits +
                        "\nBity parzytości: " + port.Parity + "\nBity stopu: " + port.StopBits;
                    int decyzja = 0;
                    if ((this.chbbin.Checked == false) && (this.chbtbin.Checked == false) && (this.chbthex.Checked == false))
                    {
                        MessageBox.Show("Nie wybrałeś rządanego rozszerzenia plików");
                        spr = 1;
                    }
                    else if ((MessageBox.Show(tekst, "Rozpoczynanie transferu", MessageBoxButtons.YesNo, MessageBoxIcon.Question)) == DialogResult.Yes) decyzja = 1;
                    if ((decyzja == 1)&&(spr==0))
                    {
                        //zmienne:
                        ulong liczbaPlikow = System.Convert.ToUInt64(tbAmount.Value);
                        ulong rozmiarPaczki; // w bitach
                        string sciezka = tbDownload.Text;
                        string format = "000000";
                        int nr_paczki = 0;
                        rozmiarPaczki=ileDoZapisu();
                        rozmiar_transmisji = liczbaPlikow * rozmiarPaczki;
                        Thread mainThread = new Thread(new ThreadStart(mainLoopTh));
                        
                    //zapis
                        pbDownload.Value = 0;
                        Byte[] start = { (Byte)128 }; port.Write(start, 0, 1); // start transmisji
                        mainThread.Start();
                        Byte[] stop = { (Byte)129 }; port.Write(stop, 0, 1); // start transmisji
                        zapisano = 0;
                    }
            }
            else System.Windows.Forms.MessageBox.Show("Aby pobrać dane musisz ustanowić połączenie");
        }
        private void mainLoopTh()
     {
         while (zapisano<=rozmiar_transmisji) 
         {
             //if(pbDownload.Value<100) pbDownload.Value += 1;
         }
      }
        private void Log(LogMsgType msgtype, string msg)
        {
            rtbTerminal.Invoke(new EventHandler(delegate
            {
                rtbTerminal.SelectedText = string.Empty;
                rtbTerminal.SelectionFont = new Font(rtbTerminal.SelectionFont, FontStyle.Bold);
                rtbTerminal.SelectionColor = LogMsgTypeColor[(int)msgtype];
                rtbTerminal.AppendText(msg);
                rtbTerminal.ScrollToCaret();
            }));
        }
        private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (!port.IsOpen) return;                                   // Nic nie rób, jeśli port jest zamknięty
                int bytes = port.BytesToRead;                           // Liczba bitów oczekująca na przeczytanie
                byte[] buffer = new byte[bytes];                        // bufor na przechowanie nadchodzących danych
                port.Read(buffer, 0, bytes);                            //czytanie z portu i umieszczanie w buforze
                mem.Write(buffer, 0, bytes);                            //zapisywanie danych do pamięci
                zapisano += System.Convert.ToUInt64(bytes);
                Log(LogMsgType.Incoming, ByteArrayToHexString(buffer));// wyświetlanie tego co przychodzi w hexach
        }
 

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