time - 在一定时间后停止执行任务的简单方法(Xamarin.Android)
问题描述
单击按钮时,我想打开一个ProgressDialog
将task
在执行 a 之前显示的,但我希望能够停止任务,即使它在一定时间后还没有完成。我在互联网上看到了很多解决方案,但它们很长。我想知道是否有更简单的方法。
这是我的On Button Click
活动:
private async void Btn_Click(object sender, System.EventArgs e)
{
var mDialog = new ProgressDialog(this);
mDialog.SetMessage("Loading data...");
mDialog.SetCancelable(false);
mDialog.Show();
CancellationTokenSource cts = new CancellationTokenSource();
cts.CancelAfter(5000);
Task<int> task = new Task<int>(Foo, cts.Token);
task.Start();
int integer = await task;
mDialog.Dismiss();
txtView.Text = integer.ToString();
}
这是我将在任务中执行的方法:
public int Foo()
{
System.Threading.Thread.Sleep(10000);
return 100;
}
5th second
是否可以在不更改我刚刚粘贴的代码的情况下在任务执行时停止任务,例如只将一些时间或对象传递给任务的构造函数,并且也不创建Foo()
方法async
解决方案
你可以试试
步骤 1. 添加计时器
Timer _timer = new Timer {Interval = 5000};
_timer.Elapsed += OnTimeEvent;
_timer.Start();
步骤2.取消定时器事件的任务
private void OnTimeEvent(object sender, ElapsedEventArgs e)
{
cts .Cancel();
}
推荐阅读
- c# - 更改密码后如何使令牌无效
- scala - 创建数据框时出现scala spark转换错误
- excel - Excel 高级搜索/交叉匹配名称
- mathematical-optimization - 如何更新目标函数中的对偶变量以影响决策?
- vue.js - 如何从 Vue 组件的类中触发组件特定事件?
- content-security-policy - 未检测到 CSP 标头
- node.js - 如何使用条件表达式在 dynamo db 中编写查询
- php - 转换为 php 多维数组后如何循环遍历 json 对象?
- reactjs - 尝试在 React-Native 中使用 MOBX
- c# - PrincipalPermission.Demand() 检查哪个委托人?