0

IDTECH カードライターがスワイプを待っている間に、「カードをスワイプしてください」という新しいフォームを表示しようとしています。

private void writecard(string track1) //string track2)
    {

        SerialPort sp1 = new SerialPort(encoderport, 9600, Parity.None, 8, StopBits.One);
        sp1.ReadTimeout = 10000;

        if (sp1.IsOpen == true)
        {
            sp1.Close();
        }


        sp1.Open();
        sp1.Write(new byte[] { 0x1B, 0x77 }, 0, 2);
        Thread.Sleep(100);
        sp1.Write(new byte[] { 0x1B, 0x73 }, 0, 2);
        Thread.Sleep(100);
        sp1.Write(new byte[] { 0x1B, 0x01 }, 0, 2);
        Thread.Sleep(100);
        sp1.Write(track1);                              // Track 1
        Thread.Sleep(100);


        sp1.Write(new byte[] { 0x3f, 0x1c }, 0, 2);
        swipeform swipepop = new swipeform();
        swipepop.ShowDialog();                        // **Problem**



        Thread.Sleep(100);

        try
        {
            swipepop.Close();                         // **Problem**
            int firstChar = sp1.ReadChar();
            Thread.Sleep(500);
            string data = String.Concat(Convert.ToChar(firstChar), sp1.ReadExisting());
            //textBox3.Text = String.Format(data);
            if (data != "")
            {
                char result = data[1];
                if (result == '0')
                    MessageBox.Show("Encoding Successful");

                else
                    MessageBox.Show("Encoding Failed - Please try again");
            }
        }
        catch (System.TimeoutException)
        {
            MessageBox.Show("Timed out.  Please try again.");
            sp1.Write(new byte[2] { 0x1b, 0x61 }, 0, 2);
        }
        sp1.Close();
    }

私が抱えている問題は、writecard メソッドが呼び出されると、swipeform がポップアップし、デバイスがスワイプを要求することです。ただし、一度スワイプするとフォームは閉じず、スワイプフォームを閉じるまでメソッドは続行されません。

4

1 に答える 1

1

Form.ShowDialog()をブロックしています。つまり、フォームが閉じられる前に返されません。

解決策の 1 つ: フォーム内のシリアル ポートを確認しますswipepopSerialPortフォームのコンストラクターを介してオブジェクトを渡すことができます。

于 2012-10-16T15:34:07.223 に答える