gpt4 book ai didi

c# - 实时更新 map - 计时器类 - c#

转载 作者:行者123 更新时间:2023-11-30 17:31:17 25 4
gpt4 key购买 nike

我正在使用 asp.net 构建一个项目。该项目的一部分是一个 View (使用 google maps api),它在 map 上显示带有标记的 parking 场的状态。我正在使用 JSON 文件创建标记。

此外,我将 arduino 与一些指示 parking 场状态的传感器结合使用。

我希望这个 Json 每 2 秒更新一次(覆盖之前的 Json)(这样如果一辆车进入 parking 场并且现在已经满了 - 它会在 map 上显示为已满)

我有 2 个创建这个 Json 的函数,我想像我之前说的那样每 2 秒调用一次。

我做不到。我很高兴得到你的帮助。

查看页面的名称:“TotalPs”。

这是相关函数所在的 Controller :

    public ActionResult TotalPs()
{

ViewBag.Message = "TotalPs";
return View();

}

public ActionResult TotalPData()
{
ReadArduino(); //READ THE DATA FROM THE ARDUINO
callA(); // CREATES THE FIRST JSON
callB(); // CREATES THE 2ND JSON


var totalQueryParkingLot =
from lot in db.parkingLots
orderby lot.PricePerHour
select lot;

return Json(totalQueryParkingLot);
}

public void callA()
{

var totalQueryParkingLot =
from lot in db.parkingLots
orderby lot.PricePerHour
select lot;

var data2 = totalQueryParkingLot.ToList();

var jsonString2 = JsonConvert.SerializeObject(data2);

if (jsonString2 != null)
{
if (!Directory.Exists(Server.MapPath("~/Content/")))
{
Directory.CreateDirectory(Server.MapPath("~/Content/"));
}

}

System.IO.File.WriteAllText(Server.MapPath("~/Content/TotalJsonPL.json"), jsonString2);

}

public void callB()
{

var FreeQueryParkingLot =
from pub in db.publicParkings
orderby pub.PricePerHourpublicParking
select pub;

var data8 = FreeQueryParkingLot.ToList();

var jsonString3 = JsonConvert.SerializeObject(data8);

if (jsonString3 != null)
{
if (!Directory.Exists(Server.MapPath("~/Content/")))
{
Directory.CreateDirectory(Server.MapPath("~/Content/"));
}

}

System.IO.File.WriteAllText(Server.MapPath("~/Content/TotalJsonPU.json"), jsonString3);

}

public void ReadArduino()
{
SerialPort port = new SerialPort("COM3", 9600);
port.BaudRate = 9600;
port.PortName = "COM3";
port.Open();

bool status1 = true;
bool status2 = true;
bool status3 = true;
char[] arr = new char[4];


String data_arduino = port.ReadLine();


for (int i = 0; i < arr.Length; i++)
{
char first = data_arduino[i];
arr[i] = first;
}


int space = arr[0] - 48;

var arduinoQuery1 = from b in db.parkingLots where b.parkingLotID == 22 select b;

foreach (parkingLot parkingLot in arduinoQuery1)
{
parkingLot.freeSpaces = space;
}
db.SaveChanges();

}

在 View 中,我调用了调用其他函数的函数 TotalPData()。

View

谢谢!!

最佳答案

我假设您正在应用 ajax 调用来检索 json 数据。因此,您可以使用 setInterval 分配间隔以定期执行 ajax 调用。

var interval = setInterval(ajaxCall, 5000); //5000 MS == 5 seconds

function ajaxCall() {
clearInterval(interval);
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: 'Controller/TotalPData',
dataType: "json",
success: function (response) {
interval = setInterval(ajaxCall, 5000);
// Do something
},
error: function (a, b, c) {

}
});
}

此外,使用 SignalR 来执行此类要求可能会更好。

SignalR

关于c# - 实时更新 map - 计时器类 - c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48141114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com