Q&A
下記のような、共通のクラスを作成しました。
using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
namespace etc.Common
{
static public class clsCardReader
{
/// <summary>
/// カードリーダ設定
/// </summary>
public static SerialPort Initial_Setting(SerialPort srlPort)
{
try
{
//利用可能なシリアルポート名の配列を取得する string[] PortList = null; PortList = SerialPort.GetPortNames(); //Shift-Jisの設定 srlPort.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS"); //オープンするシリアルポートをコンボボックスから取り出す. srlPort.PortName = PortList[0]; srlPort.BaudRate = 38400; //データ 8bit パリティ None ストップビット 1 srlPort.DataBits = 8; srlPort.Parity = Parity.None; srlPort.StopBits = StopBits.One; srlPort.Handshake = Handshake.None; srlPort.RtsEnable = true; //リードタイムアウト 500ms srlPort.ReadTimeout = 500; //ライトタイムアウト 1000ms srlPort.WriteTimeout = 1000; try { //シリアルポートをオープンする. srlPort.Open(); } catch (Exception ex) { clsMessage.ShowMessage(ex.Message); } } catch (Exception ex) { clsMessage.ShowMessage(ex.Message); } return srlPort; } /// <summary> /// カードナンバー取得 /// </summary> /// <param name="srlPort"></param> /// <returns></returns> public static string getCardNumber(SerialPort srlPort) { //クラス宣言 string data = null; //シリアルポートをオープンしていない場合、処理を行わない. if (srlPort.IsOpen == false) { return string.Empty; } //受信データを読み込む. data = srlPort.ReadExisting(); //受信したデータからCRとLFを削除 data = data.Replace("\r", ""); data = data.Replace("\n", ""); return data; } }
}
上記のクラスを呼び出している部分
private void form_Load(object sender, EventArgs e)
{
//フォームサイズ固定
this.AutoSizeMode = AutoSizeMode.GrowAndShrink;
this.sptSerialPort.DataReceived += new SerialDataReceivedEventHandler(sptSerialPort_DataReceived); this.sptSerialPort.Close(); this.sptSerialPort = AnsinNote.Common.clsCardReader.Initial_Setting(this.sptSerialPort);
}
SerialPortがうまく閉じられていないから、
「ポート'COM4'へのアクセスが拒否されました」と言う
エラーが出ていると思いますが対処方法が解りません
どなたかわかる方よろしくお願いします
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。