簡體   English   中英

實時更新地圖 - 定時器類 - c#

[英]Live update map - Timer class - c#

我正在用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()來調用其他函數。

視圖

TNX!

我假設您正在應用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM