इस तरह मैंने किया:
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern SafeFileHandle CreateFile(string lpFileName, int dwDesiredAccess, int dwShareMode, IntPtr securityAttrs, int dwCreationDisposition, int dwFlagsAndAttributes, IntPtr hTemplateFile);
फिर बाद में
int dwFlagsAndAttributes = 0x40000000;
var portName = "COM5";
var isValid = SerialPort.GetPortNames().Any(x => string.Compare(x, portName, true) == 0);
if (!isValid)
throw new System.IO.IOException(string.Format("{0} port was not found", portName));
//Borrowed from Microsoft's Serial Port Open Method :)
SafeFileHandle hFile = CreateFile(@"\\.\" + portName, -1073741824, 0, IntPtr.Zero, 3, dwFlagsAndAttributes, IntPtr.Zero);
if (hFile.IsInvalid)
throw new System.IO.IOException(string.Format("{0} port is already open", portName));
hFile.Close();
using (var serialPort = new SerialPort(portName, 115200, Parity.None, 8, StopBits.One))
{
serialPort.Open();
}
मैं वास्तव में एक अधिक 'सुरुचिपूर्ण' समाधान के लिए उम्मीद कर रही थी पर ... लेकिन जब सब कुछ विफल ' कार्यक्रम को काम करने के लिए संभव माध्यमों का उपयोग करें! –
किसी ऐसे व्यक्ति के लिए स्पष्ट होना जो सीरियलपोर्ट व्यवहार को नहीं जानता है, उपर्युक्त उत्तर बंदरगाह का उपयोग नहीं करता है। खोलें जो कॉलर ने बंदरगाह खोला है या नहीं, अगर कोई अन्य अनुप्रयोग कहता है तो नहीं - इसके लिए संवाद करने का प्रयास बंदरगाह बनाया जाना चाहिए और एक अपवाद फेंक दिया - उपयोग में बंदरगाह, पहुंच से इनकार कर दिया। – Ken