Текущая проблема, с которой я столкнулся, - это когда нажата кнопка, кажется, ничего не происходит. Я не знаю, почему это происходит.Задача не работает?
Вот по щелчку метод кнопка будет нажата:
private void computeStart_Click(object sender, EventArgs e)
{
_computeTokenSource = new CancellationTokenSource();
GenerateAll(_computeTokenSource.Token);
}
Вот метод вызывается по щелчку.
private async void GenerateAll(CancellationToken token)
{
await new Task(() =>
{
var total = (long) Math.Pow(36, 6);
var options = new ParallelOptions {CancellationToken = token};
Parallel.For(0, total, options, a => GenerateCodeAndHash());
}, TaskCreationOptions.LongRunning);
}
Наконец это метод вызывается в Parallel.For
private void GenerateCodeAndHash()
{
var result = new string(
Enumerable.Repeat(Chars, 6)
.Select(s => s[new Random().Next(s.Length)])
.ToArray());
if (_dictionary.ContainsKey(result)) return;
var hash = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(result));
var sb = new StringBuilder();
for (var j = 0; j < 2; j++)
sb.Append(hash[j].ToString("x2"));
_dictionary.TryAdd(result, sb.ToString());
}
Вы проверяли, что страница загружается или нет. Если событие Page_Load уволено, тогда, пожалуйста, покажите исходный код. –
@GovindaRajbhar Это не страница, это форма окон. Я должен был указать это. – shredder8910
'Math.Pow (36, 6)' переполняет 64-битное целое число. Разумеется, дело не в этом. 'new Random()' всегда будет возвращать одно и то же случайное число, если вызывается на той же миллисекунде. Синхронизировать доступ к _dictionary. – usr