我有以下函数计算第n个素数(不是我的功能):异步总理计算
public long FindPrimeNumber(long n)
{
int count = 0;
long a = 2;
while (count < n)
{
long b = 2;
int prime = 1;// to check if found a prime
while (b * b <= a)
{
if (a % b == 0)
{
prime = 0;
break;
}
b++;
}
if (prime > 0)
count++;
a++;
}
return (--a);
}
我想调用这个函数在你输入一个号码,然后该函数是一个WPF应用程序调用一个按钮:
private void one_Click(object sender, RoutedEventArgs e)
{
answer = FindPrimeNumber(Convert.ToInt64(txtprime.Text));
MessageBox.Show(answer.ToString());
}
这工作得很好,但是当你开始从100万输入的数字。这得慢,并阻止用户界面。
因此,我想使按钮异步,以便它不会阻止用户界面。
这是我尝试:
public async Task<long> Async_FindPrimeNumber(long n)
{
int count = 0;
long a = 2;
while (count < n)
{
long b = 2;
int prime = 1;// to check if found a prime
while (b * b <= a)
{
if (a % b == 0)
{
prime = 0;
break;
}
b++;
}
if (prime > 0)
count++;
a++;
}
return (--a);
}
异步按钮:
private async void two_Click(object sender, RoutedEventArgs e)
{
answer = await Async_FindPrimeNumber(Convert.ToInt64(txtprime.Text));
MessageBox.Show(answer.ToString());
}
但UI仍然受阻。我怎样才能使这种方法异步? 谢谢
您当前的代码已经产生警告正好说明你做错了什么,为什么你的“异步”操作”不是个实际上是异步的。 – Servy
你需要使用一个线程。 –