kod:Dlaczego odmawia się dostępu do portu COM?
static void Main(string[] args)
{
Console.WriteLine("Memory mapped file reader started");
using (var file = MemoryMappedFile.OpenExisting("AIDA64_SensorValues"))
{
using (var readerz = file.CreateViewAccessor(0, 0))
{
var bytes = new byte[567];
var encoding = Encoding.ASCII;
readerz.ReadArray<byte>(0, bytes, 0, bytes.Length);
File.WriteAllText("C:\\myFile.txt", encoding.GetString(bytes));
var readerSettings = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment };
using (var reader = XmlReader.Create("C:\\myFile.txt", readerSettings))
{
while (reader.Read())
{
using (var fragmentReader = reader.ReadSubtree())
{
if (fragmentReader.Read())
{
reader.ReadToFollowing("value");
SerialPort port = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);
port.Open();
port.Write(reader.ReadElementContentAsString() + ",");
}
}
}
}
}
}
Console.WriteLine("Press any key to exit ...");
Console.ReadLine();
}
odczytuje z pamięci współdzielonej, pisze, że wspólna pamięć do pliku, a następnie ten sam plik jest otwierany z czytnikiem XML i dzieli XML, ponieważ ma wiele korzeni, a następnie pobiera wartość węzła na każdy nowy podział xml i wysyła przez szeregowy. działa na pierwszym podzielonym pliku xml, a jego węzeł jest wysyłany przez port szeregowy, a następnie zatrzymuje się z dostępem odmawia się komunikatu portu przy próbie zapisania drugiego węzła do portu szeregowego.
Mam inną aplikację, którą zrobiłem z tego samego kodu seryjnego i działa dobrze (po prostu zmęczony to zamknęło go.) ... więc to dziwne.
Może nie zamykasz niektórych referencji poprawnie, a otwarty akcesor oznacza odmowę większego dostępu z tej samej aplikacji/wątku? –