最近轉入零售行業開發了一系列產品,包含便利店收銀軟體、會員系統、**鏈系統。為了追趕潮流,收銀軟體使用了electron平台開發,介面效果、開發效率確實不錯;但是涉及到串列埠通訊時遇到了麻煩,electron不能直接使用node.js的串列埠模組。網上有一些文章推薦編譯electron原始碼來實現串列埠模組的整合,向這條路走的過程中發現困難重重,嘗試多次都沒有成功,於是放棄。
經過一系列的google並測試後,終於通過呼叫第三方應用程式的方式實現:electron啟動c#開發的程式、c#程式直接與串列埠通訊並將串列埠接收的內容返回給electron。經過一段時間使用,程式表現穩定,終於了卻一樁心事。下面分享一下心得。
electron與串列埠的通訊原理比較簡單,分三步完成:
1. electron應用中啟動命令列程式(c#實現),並監聽命令列輸出;
2. 從electron中給命令列傳送指令;
3. 命令列程式開啟串列埠,並監聽串列埠返回與使用者輸入指令,實時將操作結果與串列埠輸出到命令列;
electron中程式段:
const spawn = require('child_process').spawn,c#命令列程式段:var childprocess = spawn('d:\\serialportdemo.exe', ['com4',9600]); //
啟動serialportdemo.exe程式(c#開發),並傳入兩個引數:串口號與波特率;
childprocess.stdout.on('data', (data) => ); //
監聽serialportdemo.exe的輸出,並將輸出列印出來
//讓下方程式休眠一段時間後執行,可以看到c#的輸出;
settimeout(function
(), 30000)
using注:c#程式中應當讓串列埠的操作在子執行緒中進行,串列埠接收事件阻塞子執行緒;接收輸入命令的操作在主線程中進行,並阻塞主線程;system;
using
system.collections.generic;
using
system.io.ports;
using
system.linq;
using
system.text;
using
system.threading;
namespace
serialportdemo
}else
if (command == "
quit")
return
; }}}
static
void openport(object
paremeter)
}private
static
void _serialport_datareceived(object
sender, serialdatareceivedeventargs e)
catch
(exception ex)}}
}
C 呼叫外部應用程式
呼叫外部程式 1先初始化要啟動的程序 processstartinfo 指定啟動程序時使用的一組值。processstartinfo startinfo new processstartinfo hh.exe decompile.2隱藏程序被啟動是的方式 startinfo.windowstyle ...
C 呼叫外部應用程式
演示說明 此示例演示如何用c 呼叫記事本程式 notepad.exe 主程式等待7秒鐘,如果使用者沒有關閉記事本程式,則主程式強制關閉。示例 using system using system.collections.generic using system.text 需要引用的命名空間。using...
C 呼叫 exe應用程式
using system.diagnostics 如果是dos process.start cmd.exe 如果是其他檔案 process.start 絕對路徑 檔名.exe 如何在 中呼叫外部 程式?使用process物件 system.diagnostics.process p new syst...