質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

1回答

36933閲覧

「ポート'COM4'へのアクセスが拒否されました」 の対処方法

msz006

総合スコア66

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2016/09/10 11:15

下記のような、共通のクラスを作成しました。

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'へのアクセスが拒否されました」と言う
エラーが出ていると思いますが対処方法が解りません

どなたかわかる方よろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

this.sptSerialPort.Close();

this.sptSerialPort = AnsinNote.Common.clsCardReader.Initial_Setting(this.sptSerialPort);

Open する前、先に Close しているのが気になります。
IsOpen プロパティでオープンしている場合のみ、Close しても変わらないでしょうか。

変わらない場合は、どのコード行でエラーが発生しているか教えて下さい。

投稿2016/09/18 08:00

Tipo

総合スコア239

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問