मेरा सी # एप्लिकेशन COM बंदरगाहों का उपयोग करता है। मुझे कुछ कठिनाई हो रही है जो अधिकांश कार्यक्रमों के लिए आम होनी चाहिए। जब पोर्टनाम की सूची बदलती है तो मुझे एक ईवेंट प्राप्त करने की आवश्यकता होती है। मेरे पास एक चयन बॉक्स है जहां उपयोगकर्ता उपलब्ध पोर्ट नामों की टीएच सूची से चुन सकता है। क्या किसी के पास कोड का स्निपेट है? धन्यवाद।नया COM पोर्ट उपलब्ध घटना
उत्तर
COM बंदरगाह बदलना एक दुर्लभ घटना है, सामान्य नहीं है।
सबसे आसान तरीका एक टाइमर होना होगा और प्रत्येक 10-30 सेकंड COM बंदरगाहों की सूची का आकलन करेगा और यदि बदल गया है, तो सूची अपडेट करें।
अभी भी बेहतर है, एक "ताज़ा सूची" बटन प्रदान - सूची मूल रूप से केवल बदल जाएगा, तो उपयोगकर्ता के एक यूएसबी सीरियल एडाप्टर खामियों को दूर किया है
http://www.codeproject.com/Articles/60579/A-USB-Library-to-Dectect-USB- डिवाइसेस आपको दिखाएंगे कि यूएसबी अटैच/डिटेच इवेंट्स को कैसे सुनें। इसके अलावा, उपयोगकर्ता के लिए 10-30 सेकंड शायद बहुत लंबा है, रीफ्रेश बटन के लिए +1 वोट दें। – Simon
एक सरल फार्म आवेदन बनाएँ और रूप में निम्न कोड डाल:।
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 537: //WM_DEVICECHANGE
var ports = SerialPort.GetPortNames().OrderBy(name => name);
foreach (var portName in ports)
{
Debug.Print(portName);
}
break;
}
base.WndProc(ref m);
}
क्या यह विंडोज सेवा संदेश पंप के अंदर काम कर सकता है? ओएस: विन 7। यदि नहीं, तो कोई कामकाज? –
@ एड्रियन सालाजार: पता नहीं, कभी कोशिश नहीं की। लेकिन मुझे कोई कारण नहीं दिख रहा है कि इसे क्यों काम नहीं करना चाहिए। बस इसे आज़माएं और यदि यह काम नहीं करता है, तो अपनी समस्या के साथ एक नया प्रश्न पूछें। – Oliver
छोटे छोटे "ओवरराइड" कीवर्ड वह है जिसे मैं चिंतित करता हूं। Windows सेवा के अंदर कभी भी इस विशिष्ट विधि को कभी नहीं देखा, इसलिए, ओवरराइड करने के लिए नोट करना। –
यह भी "ManagementEventWatcher" की मदद से किया जा सकता है:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel.Composition;
using System.Linq;
using System.Text;
using System.Management;
using System.IO.Ports;
using System.Threading;
using System.Threading.Tasks;
namespace HmxFlashLoader
{
/// <summary>
/// Make sure you create this watcher in the UI thread if you are using the com port list in the UI
/// </summary>
[Export]
[PartCreationPolicy(CreationPolicy.Shared)]
public sealed class SerialPortWatcher : IDisposable
{
public SerialPortWatcher()
{
_taskScheduler = TaskScheduler.FromCurrentSynchronizationContext();
ComPorts = new ObservableCollection<string>(SerialPort.GetPortNames().OrderBy(s => s));
WqlEventQuery query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent");
_watcher = new ManagementEventWatcher(query);
_watcher.EventArrived += (sender, eventArgs) => CheckForNewPorts(eventArgs);
_watcher.Start();
}
private void CheckForNewPorts(EventArrivedEventArgs args)
{
// do it async so it is performed in the UI thread if this class has been created in the UI thread
Task.Factory.StartNew(CheckForNewPortsAsync, CancellationToken.None, TaskCreationOptions.None, _taskScheduler);
}
private void CheckForNewPortsAsync()
{
IEnumerable<string> ports = SerialPort.GetPortNames().OrderBy(s => s);
foreach (string comPort in ComPorts)
{
if (!ports.Contains(comPort))
{
ComPorts.Remove(comPort);
}
}
foreach (var port in ports)
{
if (!ComPorts.Contains(port))
{
AddPort(port);
}
}
}
private void AddPort(string port)
{
for (int j = 0; j < ComPorts.Count; j++)
{
if (port.CompareTo(ComPorts[j]) < 0)
{
ComPorts.Insert(j, port);
break;
}
}
}
public ObservableCollection<string> ComPorts { get; private set; }
#region IDisposable Members
public void Dispose()
{
_watcher.Stop();
}
#endregion
private ManagementEventWatcher _watcher;
private TaskScheduler _taskScheduler;
}
}
- 1. उपलब्ध COM पोर्ट कैसे खोजें?
- 2. उपलब्ध COM पोर्ट्स
- 3. एंड्रॉइड ब्लूटूथ COM पोर्ट
- 4. Arduino COM पोर्ट
- 5. डीबग COM पोर्ट अन्य अंत
- 6. उपलब्ध पोर्ट कैसे ढूंढें?
- 7. keydown घटना नया मान
- 8. Arduino COM पोर्ट को स्वतः कैसे पहचानें?
- 9. Jquery - पोर्ट आकार परिवर्तन घटना देखें?
- 10. किसी भी उपलब्ध पोर्ट से कैसे जुड़ें?
- 11. COM
- 12. मैं एक कस्टम पोर्ट यूएसबी डिवाइस को COM पोर्ट के रूप में कैसे दिखा सकता हूं?
- 13. COM
- 14. COM इंटरफ़ेस का नया उदाहरण क्यों बनाना संभव है?
- 15. COM
- 16. COM, COM +, DCOM, कहां से शुरू करें?
- 17. COM
- 18. पार धागा आपरेशन मान्य नहीं है, जबकि एक COM पोर्ट को सुन
- 19. यूएसबी से सीरियल पोर्ट
- 20. अलर्ट जब आईओएस ऐप का नया संस्करण उपलब्ध है
- 21. एटीएल का उपयोग कर गणना COM COM (IDISpatch) विधियां?
- 22. सीएलआर COM संदर्भ 0x3b2d70 से COM संदर्भ
- 23. होस्ट पोर्ट 80 से वर्चुअलबॉक्स पोर्ट 80 तक पोर्ट अग्रेषण
- 24. सीरियल पोर्ट संचार: सीरियल पोर्ट डेटा का उपयोग कर बनाम सीरियल पोर्ट बनाम
- 25. डी का उपयोग कर सीरियल पोर्ट या यूएसबी पोर्ट?
- 26. proc COM ऑब्जेक्ट
- 27. रजिस्ट्री, कमांड लाइन या सॉफ़्टवेयर के माध्यम से COM पोर्ट बदलें?
- 28. सी # जांचें कि क्या एक COM (सीरियल) पोर्ट पहले से ही खुला है
- 29. बैच फ़ाइल का उपयोग कर COM पोर्ट से डेटा कैसे पढ़ा जाए?
- 30. सीरियल COM पोर्ट का उपयोग करने वाला यूएसबी क्लास क्या करता है?
मुझे लगता है कि एक सामान्य 'नया यूएसबी डिवाइस' या 'नया पीएनपी डिवाइस' सिस्टम इवेंट है जिसे आप देख सकते हैं, लेकिन नए COM बंदरगाहों के सामने आने से पहले डिवाइस को शुरू करने के लिए आपको एक सेकंड का इंतजार करना पड़ सकता है। – Rup
@Rup - आप सही हैं। डिवाइस अधिसूचना के बीच एक अंतराल है और जब System.IO.Ports.SerialPort.GetPortNames() परिवर्तन को प्रतिबिंबित करेगा। यही कारण है कि उस सूची को अद्यतन होने पर अधिसूचित होना वास्तव में अच्छा होगा। – GTAE86