我的USB条形码扫描仪有点问题.我正在使用带有"SerialPort"类的Scanner:
this._barcodeScanner = new SerialPort(comPort, 9600, Parity.None, 8, StopBits.One) { Handshake = Handshake.None, ReadTimeout = 500, WriteTimeout = 500 };
this._barcodeScanner.Open();
this._barcodeScanner.DataReceived += BarcodeScannerCallback;
Run Code Online (Sandbox Code Playgroud)
如果我通过"SerialPort"类打开USB设备,我就无法正常关闭软件,虚拟端口永远保持打开状态,或直到我重启整个计算机.
所以我的问题是,在我通过C#代码拔出设备后,有没有办法关闭虚拟端口?
问候
[编辑#1]
好的,还有一些代码:
这样,如果设备已插入,我每隔10秒检查一次:
private bool CheckUsbDeviceAvailability()
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI",
"SELECT * FROM MSSerial_PortName WHERE PortName = '" + this.PortName + "'");
if (searcher.Get().Count > 0)
return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
那是串口的Callback-Event:
void BarcodeScannerCallback(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(500);
string data = this._barcodeScanner.ReadExisting().Replace(Convert.ToChar(2), Convert.ToChar(32)).Trim();
if (data.StartsWith("AX"))
{
string[] arrData = data.Split('\n'); …Run Code Online (Sandbox Code Playgroud) 我刚才有一个关于Microsofts PresentationFramework的问题DataGrid:
我有一个ObservableCollection<TestModel>.TestModel是一个简单的类,具有20个Int属性......仅此而已.在我的测试中,我有50个参赛作品ObservableCollection.总的来说,我有1000个细胞(20*50).所有这些单元格都会立即显示,因此实际上无法实现虚拟化.
这是我的网格:
<DataGrid AutoGenerateColumns="true" RowHeight="20" ItemsSource="{Binding DataGridModelSource}"/>
Run Code Online (Sandbox Code Playgroud)
在我看来,要呈现的1000个单元格不是很多......虽然它需要,取决于我运行此测试的系统,大约需要1到3秒来渲染这些1000个单元格.那是相当多的,不是吗?
我使用DataGridsC1,Infragistics,Mindscape或DX中的一个定制进行了相同的测试,并且使用所有这些网格将渲染这1000个单元的时间减少到大约100ms.
那么微软有DataGrid什么意义呢?有什么方法可以改善性能吗?我错过了什么吗?