c# - CancelInvoke 实际上并没有取消任何东西
问题描述
我有一个函数ReadDataFromBHI()
可以初始化一个串行端口然后打开它,然后用于每隔一段时间InvokeRepeating
读取数据。3 sec
它工作正常,问题是它不会停止。
我有一个断开连接按钮,单击时会调用ClosePorts()
。正如您所看到的,ClosePorts()
应该有一个设置为 false 的布尔标志,这也不起作用。继续读取数据并打印到控制台窗口。CancelInvoke
ReadDataContinuously
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")
or 布尔标志可以阻止串行端口读取数据,但两者都不起作用。
解决方案
推荐阅读
- php - 通过回显自动从 mysql 检索许多图像并在单击时放大它们
- javascript - 如何解决 xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded") 的错误?
- data-structures - 在事件溯源中编辑一组(例如标签)
- string - 哪种编码可以用来混淆常见的英文字母 [a-zA-Z]?
- node.js - 用于查询 GraphQL 端点的 Lambda 函数?
- python - 为什么当我使用“is”而不是“==”时,np.all 返回错误的值?
- flutter - 如何在 Flutter 中真正使用 SizeTransition?
- angular - Angular 材质 datepiker 配置时间
- python - 基于多重关系优化模型设计
- php - 如何将 PHP 参数传递到 system32 文件夹中的 bat 文件中