我如何在特定时间段内运行C#

时间:2018-10-23 05:59:07

标签: c# .net azure azure-iot-hub

我有下面的代码可以无限期运行,但是我要花些时间作为用户的输入。

因此,如果用户输入15密耳,我想将此代码运行15密耳。

是的,我可以将DateTime.Now与15mits进行比较,但是还有其他有效的方法吗?因为这将是我的多线程应用程序。

private static async void SendDeviceToCloudMessagesAsync(string deviceid , string deviceKey)
        {
            deviceClient = DeviceClient.Create("HOSTNAME", new DeviceAuthenticationWithRegistrySymmetricKey(deviceid, deviceKey), Microsoft.Azure.Devices.Client.TransportType.Mqtt);

            double minTemperature = 20;
            double minHumidity = 60;
            int messageId = 1;
            Random rand = new Random();
            do
            {
                double currentTemperature = minTemperature + rand.NextDouble() * 15;
                double currentHumidity = minHumidity + rand.NextDouble() * 20;
                var telemetryDataPoint = new
                {
                    messageId = messageId++,
                    deviceId = deviceid,
                    temperature = currentTemperature,
                    humidity = currentHumidity
                };
                var messageString = JsonConvert.SerializeObject(telemetryDataPoint);
                var message = new Microsoft.Azure.Devices.Client.Message(Encoding.ASCII.GetBytes(messageString));
                message.Properties.Add("temperatureAlert", (currentTemperature > 30) ? "true" : "false");
                await deviceClient.SendEventAsync(message);
                Console.WriteLine("{0} > Sending message: {1}", DateTime.Now, messageString);
                await Task.Delay(1000);
            } while (true);
        }

2 个答案:

答案 0 :(得分:1)

您可以签出System.Timers.Timer。您可以在构造函数中创建一个实例来设置时间间隔,然后编写一个方法来处理Elapsed事件。

    // Create a timer with a two second interval.
    var aTimer = new System.Timers.Timer(2000);
    // Hook up the Elapsed event for the timer. 
    aTimer.Elapsed += OnTimedEvent // Name this whatever you want and put code here;
    aTimer.AutoReset = true;
    aTimer.Enabled = true;

您现在所要做的就是编写Elapsed事件处理程序...在这种情况下为OnTimedEvent。请注意,此方法必须具有以下签名:

私有静态空对象源,ElapsedEventArgs e)

答案 1 :(得分:0)

尝试替换您的代码

等待Task.Delay(TimeSpan.FromSeconds(1000));