सी# कार्यक्रम हो जाता है जमे हुए उद्घाटन एक नया रूप है, जबकि सीरियल पोर्ट है

0

सवाल

मैं पर काम कर रहा हूँ कि एक इंटरफेस से डेटा प्राप्त करता है सीरियल बंदरगाहों और एक बार यह हो जाता है एक विशेष मूल्य यह पता चलता है एक और रूप है, लेकिन जब यह दिखाया गया है खिड़की फ़्रीज कर सकता है आप मेरी मदद करने के लिए एक समाधान खोजने के लिए यह?

सार्वजनिक स्ट्रिंग[] डेटा=नए स्ट्रिंग[14]; सार्वजनिक SerialPort बंदरगाह = नए SerialPort("COM17",2400, समता । कोई नहीं,8,StopBits.एक); निजी कतार recievedData = नया कतार();

public MainForm()
{
 InitializeComponent();
  
    port.Open();
    port.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
    int count = port.BytesToRead;
    byte[] ByteArray = new byte[count];

}




public void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{


    byte[] data = new byte[port.BytesToRead];
    port.Read(data, 0, data.Length);
    data.ToList().ForEach(b => recievedData.Enqueue(b));
    processData();
   

}

public void processData()
{
 byte[] byteArray = new byte[14];
 if (recievedData.Count > 13)
 {
 for (int i = 0; i < byteArray.Length; i++)
 {
  byteArray[i] = recievedData.Dequeue();
 }

    }
    for (int i = 0; i < 14; i++)
    {
        data[i] = byteArray[i].ToString();
    }
  
    int value0 = Convert.ToInt16(data[0]);
    BitArray b0 = new BitArray(new int[] { value0 });
    bool[] bits0 = new bool[b0.Count];
    b0.CopyTo(bits0, 0);

    int value1 = Convert.ToInt16(data[1]);
    BitArray b1 = new BitArray(new int[] { value1 });
    bool[] bits1 = new bool[b1.Count];
    b1.CopyTo(bits1, 0);

    int value2 = Convert.ToInt16(data[2]);
    BitArray b2 = new BitArray(new int[] { value2 });
    bool[] bits2 = new bool[b2.Count];
    b2.CopyTo(bits2, 0);

    int value3 = Convert.ToInt16(data[3]);
    BitArray b3 = new BitArray(new int[] { value3 });
    bool[] bits3 = new bool[b3.Count];
    b3.CopyTo(bits3, 0);

    int value4 = Convert.ToInt16(data[4]);
    BitArray b4 = new BitArray(new int[] { value4 });
    bool[] bits4 = new bool[b4.Count];
    b4.CopyTo(bits4, 0);

    int value5 = Convert.ToInt16(data[5]);
    BitArray b5 = new BitArray(new int[] {value5});
    bool[] bits5 = new bool[b5.Count];
    b5.CopyTo(bits5, 0);

    int value6 = Convert.ToInt16(data[6]);
    BitArray b6 = new BitArray(new int[] { value6 });
    bool[] bits6 = new bool[b6.Count];
    b6.CopyTo(bits6, 0);

    int value7 = Convert.ToInt16(data[7]);
    BitArray b7 = new BitArray(new int[] { value7 });
    bool[] bits7 = new bool[b7.Count];
    b7.CopyTo(bits7, 0);

    int value8 = Convert.ToInt16(data[8]);
    BitArray b8 = new BitArray(new int[] { value8 });
    bool[] bits8 = new bool[b8.Count];
    b8.CopyTo(bits8, 0);

    int value9 = Convert.ToInt16(data[9]);
    BitArray b9 = new BitArray(new int[] { value9});
    bool[] bits9 = new bool[b9.Count];
    b9.CopyTo(bits9, 0);

    int value10 = Convert.ToInt16(data[10]);
    BitArray b10 = new BitArray(new int[] { value10 });
    bool[] bits10 = new bool[b10.Count];
    b10.CopyTo(bits10, 0);

    int value11 = Convert.ToInt16(data[11]);
    BitArray b11 = new BitArray(new int[] { value11 });
    bool[] bits11 = new bool[b11.Count];
    b11.CopyTo(bits11, 0);

    int value12 = Convert.ToInt16(data[12]);
    BitArray b12 = new BitArray(new int[] { value12 });
    bool[] bits12 = new bool[b12.Count];
    b12.CopyTo(bits12, 0);

    int value13 = Convert.ToInt16(data[13]);
    BitArray b13 = new BitArray(new int[] { value13 });
    bool[] bits13 = new bool[b13.Count];
    b13.CopyTo(bits13, 0);

  
    if (bits13[2]&&reentrant==0)
    {
     reentrant = 1;
     
        Form1 formita = new Form1(this);
        formita.Show();

    }

    string direction = "";

    if (bits1[3]==true)
    {
        direction = "-";
    }

    string firstdigital = bittobcd(bits1[2], bits1[1], bits1[0], bits2[3], bits2[2], bits2[1], bits2[0]);
    string seconddigital = bittobcd(bits3[2], bits3[1], bits3[0], bits4[3], bits4[2], bits4[1], bits4[0]);
    string thirddigital = bittobcd(bits5[2], bits5[1], bits5[0], bits6[3], bits6[2], bits6[1], bits6[0]);
    string fourthdigital = bittobcd(bits7[2], bits7[1], bits7[0], bits8[3], bits8[2], bits8[1], bits8[0]);


    Writing(direction+firstdigital+seconddigital+thirddigital+fourthdigital);
  
}

string bittobcd(bool a, bool b, bool c, bool d, bool e, bool f, bool g)
{
 string number="";

 if (a == false && b == false && c == false && d == false && e == true && f == false && g == true)
 {
  number = "1";
 }
 else if(a == true && b == false && c == true && d == true && e == false && f == true && g == true)
 {
  number = "2";
 }
 else if(a == false && b == false && c == true && d == true && e == true && f == true && g == true)
 {
  number = "3";
 }
 else if(a == false && b == true && c == false && d == false && e == true && f == true && g == true)
 {
  number = "4";
 }
 else if(a == false && b == true && c == true && d == true && e == true && f == true && g == false)
 {
  number = "5";
 }
 else if(a == true && b == true && c == true && d ==true  && e == true && f == true && g == false)
 {
  number = "6";
 }
 else if(a == false && b == false && c == true && d == false && e == true && f == false && g == true)
 {
  number = "7";
 }
 else if(a == true && b == true && c == true && d == true && e == true && f == true && g == true)
 {
  number = "8";
 }
 else if(a == false && b == true && c == true && d == true && e == true && f == true && g == true)
 {
  number = "9";
 }
 else if(a == true && b == true && c == true && d == true && e == true && f == false && g == true)
 {
  number = "0";
 }
 else if(a == true && b == true && c == false && d == true && e == false && f == false && g == false)
 {
  number = "L";
 }
 else if(a == false && b == false && c == false && d == false && e == false && f == false && g == false)
 {
  number = " ";
 }

 return number;
}

public void Writing(string text)
{
    if (textBox2.InvokeRequired)
    {
        Action safeWrite = delegate { Writing($"{text}"); };
        textBox2.Invoke(safeWrite);
    }
    else
        textBox2.Text = text;
}

}

सार्वजनिक MainForm mainy2; सार्वजनिक Form1(MainForm mainy) { InitializeComponent(); mainy2 = mainy; }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.Invoke((MethodInvoker)delegate
        {

            mainy2.Hide();
        });

    }
c# forms multithreading serial-port
2021-11-23 18:01:33
1

सबसे अच्छा जवाब

0

के रूप में Ralf का उल्लेख है, serialPort1_DataReceived सबसे शायद उठाया जा सकता है पर एक पृष्ठभूमि धागा है । लेकिन फिर आप कॉल

Form1 formita = new Form1(this);
formita.Show();

जबकि यह नहीं है कड़ाई से अनुमति नहीं है, यह सबसे शायद एक अच्छा विचार नहीं है के बाद से आप नहीं होगा कई रूपों के साथ जुड़े विभिन्न यूआई धागे.

मैं मान होता है कारण के लिए फ्रीज होगा अवरुद्ध आह्वान कॉल. और यह भी हो सकता है कारण विभिन्न प्रकार के तुल्यकालन मुद्दों:

if (textBox2.InvokeRequired)
    {
        Action safeWrite = delegate { Writing($"{text}"); };
        textBox2.Invoke(safeWrite);
    }

अर्थ पृष्ठभूमि धागा रोकेंगे जब तक यूआई धागा किया है इसकी अद्यतन. और शायद वहाँ हो जाएगा का एक गुच्छा के अन्य तुल्यकालन मुद्दों.

मैं सुझाव है कि करने के लिए ही कभी किसी भी उपयोग यूआई संस्थान से यूआई धागा । मुझे लगता है कि होना चाहिए कम से कम करने में मदद. I. ई. कोड में परिवर्तन करने के लिए ऊपर

textBox2.BeginInvoke(() => {
Form1 formita = new Form1(this);
formita.Show();
});
2021-11-23 19:47:06

बहुत बहुत धन्यवाद, मैं करने के लिए बदल ` Form1 formita = नया Form1(इस); इस.आह्वान((MethodInvoker)प्रतिनिधि { formita.शो(); });`
Miguel Rodmen

@मिगेल Rodmen रूपों कर सकते हैं केवल इस्तेमाल किया जा सकता एक ही धागे पर इसे बनाया है कि. इतना है कि शायद नहीं हो सकता है की अनुमति दी.
JonasH

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में