여러 개의 창 (실제로는 두 개의 기능이있는 두 개의 거의 동일한 창)이있는 응용 프로그램이 있습니다. 이 기능 중 하나는 COM 포트에서 데이터를 읽는 것입니다 (가중치 기계에서 가중치를 읽음). 문제는 첫 번째 창에서 완벽하게 작동하지만, 다른 창을 닫고 다른 창을 연 다음 동일한 기능 (무게를 계산할 수 있음)을 클릭하면이 오류 메시지가 표시됩니다. 'COM1'포트에 대한 액세스가 거부되었습니다.직렬 포트에서 데이터를받는 동안 오류가 발생했습니다.
코드 :
private void calculateWeight_Click(object sender, RoutedEventArgs e)
{
sp = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
tekst = string.Empty;
sp.Open();
sp.WriteLine(((char)5).ToString());
sp.WriteLine(((char)17).ToString());
sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
}
private delegate void UpdateUi(string s);
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
tekst += sp.ReadExisting();
if (tekst.Contains('S') && tekst.Length > 14)
Dispatcher.Invoke(DispatcherPriority.Send, new UpdateUi(czytajWage), tekst);
}
string tekst = string.Empty;
void czytajWage(string s)
{
string w = "";
for (int i = 5; i < 14; i++)
{
w += s[i];
}
MessageBox.Show(w);
w = "";
tekst = "";
sp.DataReceived -= sp_DataReceived;
}
누구든지 도와 드릴까요? ;)
창을 닫을 때 포트를 닫으시겠습니까? –
직렬 포트를 공유 할 수 없습니다. 윈도우가 닫히고 다른 윈도우에서 다시 열 때 SerialPort를 닫는 것은 매우 번거로운 일입니다. 여기서 가장 좋은 방법은 별도의 클래스에서 SerialPort와 함께 작동하는 코드를 스핀 오프하고 해당 클래스의 인스턴스를 하나만 사용하는 것입니다. 보기에서 데이터를 분리하십시오. –