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

How can i run do while for specific time period c#

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

因此,如果用户输入 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);
        }

尝试将您的代码替换为

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

您可以查看 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。请注意,此方法必须具有此签名:

private static void 对象源,ElapsedEventArgs e)