Strona 1 z 1

C#PORT COM Opóźnienie

: 05 mar 2018, 21:39
autor: Pawel5
Witam.
Wysyłam numery telefonów z aplikacji c# na stm32. Mój problem polega na tym że jak szybko wysyałm jeden po drugim to stm nie wyrabia się z analizowaniem.
W jaki spsób zrobić w c# tak jakby delay? Używam VisualStudio 2017
Pozdrawiam

Re: C#PORT COM Opóźnienie

: 05 mar 2018, 23:18
autor: SunRiver
jest kilka sposobów :)

np:

Kod: Zaznacz cały


System.Threading.Thread.Sleep(5000); //czeka 5sekund 

można użyć Sleep tak:

Kod: Zaznacz cały


public static void Sleep(
	int millisecondsTimeout
)

i w kodzie np tak:

Kod: Zaznacz cały


using System;
using System.Threading;

class uzycieSleep
{
    static void Main()
    {
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("Poczekaj 2 sekundy");
            Thread.Sleep(2000);
        }

        Console.WriteLine("Koniec czekania ...");
    }
}

albo użyć :

Kod: Zaznacz cały


public static Task Delay(
	int millisecondsDelay
)

co się tak używa np:

Kod: Zaznacz cały


using System;
using System.Threading.Tasks;

public class taskDelay
{
   public static void Main()
   {
      var t = Task.Run(async delegate
              {
                 await Task.Delay(1000);
                 return 42;
              });
      t.Wait();
      Console.WriteLine("Task t Status: {0}, Result: {1}",
                        t.Status, t.Result);
   }
}

No są miliony rozwiązań :)

Re: C#PORT COM Opóźnienie

: 06 mar 2018, 20:27
autor: Pawel5
Użyłem pierwszej opcji i problem polega na tym że zamiast odliczyć 1 sek po wysłaniu pierwszego numeru to program czeka sekunde i wysła dwa po kolei jakbym wkleił sleep na samym początku.

Kod: Zaznacz cały

private void button2_Click(object sender, EventArgs e)
        {

            if (serialPort1.IsOpen & checkBox2.Checked)
            {
                serialPort1.WriteLine("NUMER1"); //NUMER1
                serialPort1.WriteLine("\r\n");
                serialPort1.WriteLine(">");
                serialPort1.WriteLine("\r\n");         
                serialPort1.WriteLine(textBox3.Text);
                serialPort1.WriteLine("+");
                serialPort1.WriteLine("\r\n");
            }
            else if(checkBox2.Checked) MessageBox.Show("Port jest zamknięty!", "RS232Terminal", MessageBoxButtons.OK, MessageBoxIcon.Error);

            Thread.Sleep(1000);
            if (serialPort1.IsOpen & checkBox1.Checked)
            {
                serialPort1.WriteLine("NUMER2"); //NUMER2
                serialPort1.WriteLine("\r\n");
                serialPort1.WriteLine(">");
                serialPort1.WriteLine("\r\n");
                serialPort1.WriteLine(textBox4.Text);
                serialPort1.WriteLine("+");
                serialPort1.WriteLine("\r\n");
            }
            else if(checkBox1.Checked) MessageBox.Show("Port jest zamknięty!", "RS232Terminal", MessageBoxButtons.OK, MessageBoxIcon.Error);
            /*/

Re: C#PORT COM Opóźnienie

: 06 mar 2018, 20:45
autor: SunRiver
No nie dziwię się że ci tak to zadziałało
straszna konstrukcja ci wyszła i głupieje

Re: C#PORT COM Opóźnienie

: 06 mar 2018, 20:50
autor: Pawel5
Jeszcze raczkuję w c# i tak pomyślałem żeby pod jednym przyciskiem wysłać wszystkie numery. Może jakaś sugestia jak zrobić to elegancko? ;)

Re: C#PORT COM Opóźnienie

: 06 mar 2018, 20:59
autor: SunRiver
niemam koncepcji .. na te twoje ify strasznie dużo ...
możesz za elsować ify do 5 zagnieżdrzen ....

Kod: Zaznacz cały


if ..... 
{
...
}
else if 
{
..
}
else if
{
..
}

'''''




Re: C#PORT COM Opóźnienie

: 06 mar 2018, 21:10
autor: Pawel5
Właściwie sprawdzanie portu mogę zrobić tylko raz i wysyłać dane Numer1, Numer2 itd.