C# 接收到数据后,开启线程,等待5分钟后执行函数,结束线程
时间: 2024-10-12 16:13:52 浏览: 13
在C#中,你可以使用`Thread`类和`Timer`类来实现这个需求。首先,你需要创建一个新的线程,并在线程启动之前设置一个定时器。以下是实现这个功能的一个示例:
```csharp
using System;
using System.Threading;
using System.Threading.Tasks;
public class DataProcessor
{
private Timer myTimer;
public void StartProcessingOnThread(Data data)
{
// 创建一个委托来包装你要在线程上执行的函数
Action processData = () =>
{
Console.WriteLine($"开始处理数据:{data.Value}");
// 在这里添加你的实际业务逻辑
ProcessDataLogic(data);
Console.WriteLine($"数据处理完成:{data.Value}");
};
// 设置定时器,等待5分钟
int delayInMilliseconds = 5 * 60 * 1000; // 5 minutes in milliseconds
myTimer = new Timer(processData, null, delayInMilliseconds, Timeout.Infinite);
// 启动新线程并执行工作
Task.Run(() =>
{
Console.WriteLine("开始新线程...");
Thread thread = new Thread(() => { });
thread.Start();
thread.Join(); // 等待线程结束
});
// 确保无论何时,当主线程退出时,定时器也会被取消
Console.CancelKeyPress += (sender, e) =>
{
if (myTimer != null)
myTimer.Dispose();
e.Handled = true; // 阻止默认的Ctrl+C关闭程序
};
}
private void ProcessDataLogic(Data data) // 这里是你的实际处理函数
{
// ... (你的数据处理代码)
}
}
// 数据模型示例
class Data
{
public string Value { get; set; }
}
```
在这个例子中,当你调用`StartProcessingOnThread`方法并传入数据时,它会立即启动一个新的线程,同时设置了一个5分钟后的定时器。当定时器触发时,`processData`委托内的函数会被执行。如果用户按下Ctrl+C试图停止程序,`CancelKeyPress`事件将取消定时器并防止程序退出。
阅读全文