实时更新地图 - 定时器类 - c#

问题描述 投票:3回答:1

我正在用asp.net构建一个项目。该项目的一部分是一个视图(使用谷歌地图api),在地图上显示带有maerkers的停车场的状态。我使用JSON文件来创建标记。

此外,我使用arduino与一些传感器,表明停车场状态。

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

我有两个创建这个Json的函数,我想按照我之前说的每2秒调用一次。

我不能这样做。我很乐意接受你的帮助。

视图页面的名称:“TotalPs”。

这是相关功能所在的控制器:

    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();

    }

在视图中,我调用函数TotalPData()来调用其他函数。

View

Tnx !!

c# asp.net json google-maps timer
1个回答
1
投票

我假设您正在应用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

© www.soinside.com 2019 - 2024. All rights reserved.