electron呼叫C 應用程式實現串列埠通訊

2022-02-21 13:08:21 字數 1657 閱讀 4851

最近轉入零售行業開發了一系列產品,包含便利店收銀軟體會員系統**鏈系統。為了追趕潮流,收銀軟體使用了electron平台開發,介面效果、開發效率確實不錯;但是涉及到串列埠通訊時遇到了麻煩,electron不能直接使用node.js的串列埠模組。網上有一些文章推薦編譯electron原始碼來實現串列埠模組的整合,向這條路走的過程中發現困難重重,嘗試多次都沒有成功,於是放棄。

經過一系列的google並測試後,終於通過呼叫第三方應用程式的方式實現:electron啟動c#開發的程式、c#程式直接與串列埠通訊並將串列埠接收的內容返回給electron。經過一段時間使用,程式表現穩定,終於了卻一樁心事。下面分享一下心得。

electron與串列埠的通訊原理比較簡單,分三步完成:

1. electron應用中啟動命令列程式(c#實現),並監聽命令列輸出;

2. 從electron中給命令列傳送指令;

3. 命令列程式開啟串列埠,並監聽串列埠返回與使用者輸入指令,實時將操作結果與串列埠輸出到命令列;

electron中程式段:

const spawn = require('child_process').spawn,

var childprocess = spawn('d:\\serialportdemo.exe', ['com4',9600]); //

啟動serialportdemo.exe程式(c#開發),並傳入兩個引數:串口號與波特率;

childprocess.stdout.on('data', (data) => ); //

監聽serialportdemo.exe的輸出,並將輸出列印出來

//讓下方程式休眠一段時間後執行,可以看到c#的輸出;

settimeout(function

(), 30000)

c#命令列程式段:

using

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#程式中應當讓串列埠的操作在子執行緒中進行,串列埠接收事件阻塞子執行緒;接收輸入命令的操作在主線程中進行,並阻塞主線程;

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...