【发布时间】:2013-03-17 14:42:27
【问题描述】:
如果这是async,它会返回没有错误,为什么它会抛出错误而不是async,async在这个操作中毫无价值。
public Task<int> countUp()
{
string compare = txtTag.Text;
int count = 0;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (compare == dataGridView1[0, i].Value.ToString())
{
BeginInvoke(new Action(() =>
{
count++;
txtCount.Text = count.ToString();
}));
}
}
return count;
}
【问题讨论】:
-
为什么你需要返回一个
Task<int>而不仅仅是一个普通的int? -
我需要它在另一个线程上运行。如何将 UI 中的指令传递给任务?
-
您似乎误以为异步方法在另一个线程上运行。它不是。异步方法包含一个异步等待,并且在等待发生时立即返回。然后,当等待的值可用时,它从中断处继续。确保你明白这一点; 绝对不是这种情况,异步方法必须在另一个线程上运行;事实上,我们在 C# 中添加异步方法的原因之一是减少对线程作为异步机制的依赖。
-
看你的代码,好像是控件的读写字段;如果是这样的话,这个方法可能只能在 UI 线程上运行。坦率地说,这段代码看起来很可疑。如果我是你,我会做的是开始一个新问题,仔细描述你想要做什么,并寻求帮助来实现它。