Ich habe ein Projekt in der Schule, um ein WPF-Projekt zu machen, die Verschlüsselung und Entschlüsselung eines Eingabetextes macht. Ich möchte, dass die Anwendung reagiert, aber immer einfriert.C# synchronisieren wpf
Ich möchte TPL verwenden und ich benutze TaskScheduler.FromCurrentSynchronizationContext(), aber es funktioniert nicht. Ich möchte nicht Dispatcher oder etwas anderes verwenden, was nur für WPF spezifisch ist.
tokenSource = new CancellationTokenSource();
int lineCount = textBoxInput.LineCount;
string encryptTextInput = "";
List<string> listText = new List<string>();
List<Task> listTask = new List<Task>();
var ui = TaskScheduler.FromCurrentSynchronizationContext();
for (int cnt = 0; cnt < lineCount; cnt++)
{
encryptTextInput = textBoxInput.GetLineText(cnt);
listText.Add(encryptTextInput);
}
for (int cnt = 0; cnt < lineCount; cnt++)
{
int line = cnt;
var myTask = Task.Factory.StartNew(result =>
{
return EncryptDecrypt.Encrypt(listText[line]);
}, tokenSource.Token);
listTask.Add(myTask);
var display = myTask.ContinueWith(resultTask =>
textBoxOutput.Text += myTask.Result.ToString(), CancellationToken.None, TaskContinuationOptions.OnlyOnRanToCompletion, ui);
var displayCancel = myTask.ContinueWith(resultTask =>
textBoxOutput.Text += myTask.Result.ToString(), CancellationToken.None, TaskContinuationOptions.OnlyOnCanceled, ui);
}
Wenn Ihre Verschlüsselungsfunktion die Anwendung einfriert, müssen Sie möglicherweise [Multi-Threading] (https://www.tutorialspoint.com/csharp/csharp_multithreading.htm) verwenden, damit Sie die UI-Aktualisierungen gleichzeitig ausführen können . –
Wenn Sie möchten, dass Ihre Anwendung "reaktionsfähig" ist, dann müssen Sie zuerst zwei Schleifen hintereinander eliminieren! Wenn nichts anderes die String-Nutzung halbiert, wird das sicher helfen. Zweitens, da Ihre Verschlüsselung inline ist, übertreiben Sie möglicherweise die Verwendung von TPL. KISS - halte es einfach, dumm. Tun Sie einfach zuerst die direkte Verschlüsselung, dann sehen Sie Wenn Sie Multithreading in Betracht ziehen müssen. –