두 가지 방법이 있습니다.
하나는 SerialDevice.FromIdAsync() API의 기능을 사용합니다. 직렬 장치가 하나의 프로세스를 사용하고있을 때 다른 프로세스는 SerialDevice.FromIdAsync()를 호출 할 때 null 값을 반환하므로 첫 번째 프로세스가 처리 할 때까지 사용할 수 없습니다. 다음과 같이 할 수 있습니다.
SerialDevice serialPort = null;
private async void SerialDeviceOperation()
{
var selector = SerialDevice.GetDeviceSelector();
var device = await DeviceInformation.FindAllAsync(selector);
try
{
while (serialPort == null)
{
serialPort = await SerialDevice.FromIdAsync(device[0].Id);
}
// Your code in here
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}
// Do something...
// Write or read data via serial device
// ...
// After complete the operation, dispose the device
serialPort.Dispose();
serialPort = null;
}
다른 하나는 App Service를 사용하고 있습니다. 귀하의 헤드리스 앱은 App 서비스를 호스팅 할 수 있으며 귀하의 헤드 앱은이 서비스를 호출 할 수 있습니다. 시리얼 장치를 App 서비스에 넣을 수 있으며, 시리얼 장치를 사용하려는 헤드리스 또는 헤드 응용 프로그램이 App 서비스에서 세마포를 보류해야 할 때마다 사용할 수 있습니다. 따라서 직렬 장치를 보호한다는 목표를 달성 할 수 있습니다. 당신은 이런 식으로 작업을 수행 할 수 있습니다
private static Semaphore semaphore = new Semaphore(1,1);
을 그리고 당신의 머리가없는 응용 프로그램이 두 API를 제공합니다 :
앱 서비스에 세마포어를 만들기 당신이 필요 당신의 머리가없는 응용 프로그램에서
public bool pendSemphore()
{
return semaphore.WaitOne();
}
public void releaseSemphore()
{
semaphore.Release();
}
다음 코드 줄 :
Inventory inventory = new Inventory();
private void SerialCommunication()
{
inventory.pendSemphore();
// Put your serial device operation here
// ...
inventory.releaseSemphore();
}
헤드 앱에서는 앱 서비스를 호출하여 직렬 장치를 사용할 수 있습니다. 이자형. 참조 할 수있는 추가 정보 "how to create and consume an app service".
앱 서비스가 실행되는 동안 백그라운드 작업을 중지 할 수 있는지 여부는 확실하지 않습니다. 그러나 이들을 독점적으로 만들고 싶다면, 프로세스 동기화를 수행하기 위해 프로세스 간 명명 된 뮤텍스 또는 세마포어를 사용하면됩니다. – Jackie