我有一个函数ReadDataFromBHI()
,它将初始化一个串行端口,然后打开它,然后使用InvokeRepeating
以3 sec
的间隔读取数据。
它工作正常,问题是它不会停止。
我有一个断开连接按钮,单击该按钮会调用ClosePorts()
。如您所见,ClosePorts()
应该被CancelInvoke
ReadDataContinuously
使用,并且具有设置为false的布尔值标志,这也不起作用。 ReadDataContinuously
继续读取数据并打印到控制台窗口。
有什么帮助阻止这种情况发生的吗? 谢谢
我尝试将布尔标志添加到ClosePorts()
方法并将其设置为false。这并没有阻止它。
还尝试了CancelInvoke()
,但没有限定字符串。
public class ReadPortData : MonoBehaviour // Comes here when 'connect' is clicked, to start reading serial port data
{
public TMP_Dropdown portName;
public TMP_Dropdown baudRate;
public TMP_Dropdown dataBits;
public TMP_Dropdown stopBits;
public TMP_Dropdown parity;
private string spName;
private int baud;
private int dB;
private int sB;
private string pRity;
private static bool connected;
public SerialPort sp = new SerialPort();
private void ReadDataFromBHI()
{
// First get the values that were selected on the pnlComms dropdowns
ClosePorts();
spName = portName.options[portName.value].text;
baud = int.Parse(baudRate.options[baudRate.value].text);
dB = int.Parse(dataBits.options[dataBits.value].text);
sB = int.Parse(stopBits.options[stopBits.value].text);
pRity = parity.options[parity.value].text;
sp.PortName = spName;
sp.BaudRate = baud;
sp.DataBits = dB;
sp.DtrEnable = true;
switch (sB)
{
case 0: sp.StopBits = StopBits.None; break;
case 1: sp.StopBits = StopBits.One; break;
case 2: sp.StopBits = StopBits.Two; break;
}
switch (pRity)
{
case "None": sp.Parity = Parity.None; break;
case "Odd": sp.Parity = Parity.Odd; break;
case "Even": sp.Parity = Parity.Even; break;
}
sp.Open();
Debug.Log(spName + sp.IsOpen);
connected = true;
InvokeRepeating("ReadDataContinuously", 3f, 3f);
}
public void ClosePorts() // Closes all the open ports
{
CancelInvoke("ReadDataContinuously");
connected = false;
string[] ports = SerialPort.GetPortNames();
foreach (string s in ports)
{
if (sp.IsOpen)
{
sp.Close();
Debug.Log(s + " is now closed");
}
else
{
Debug.Log(s + " is already closed");
}
}
}
public void ReadDataContinuously()
{
Debug.Log(connected);
if (connected)
{
string buf = "";
string s;
string witsItem;
string witsData;
buf += sp.ReadExisting();
Debug.Log(buf);
}
}
}
我希望CancelInvoke("string")
或布尔值标志会阻止串行端口读取数据,但两者均无法正常工作。