L'application prend le texte à partir d'inputField recherche dans la regex et renvoie les résultats dans outputField. Pour le mettre en quelques lignes de code que j'ai quelque chose comme ceci:C# WPF Freezing UI
public class Parser {
public Parser(string _text)
{
text = _text;
}
private string text { get; set; }
public string[] find()
{
string r1 = "...";
string r2 = "...";
string r3 = "...";
string[] regArray = new string[] { r1, r2, r3 };
List<string> resL = new List<string>();
for (int i = 0; i < regArray.Length; i++)
{
MatchCollection matchList = Regex.Matches(text, regArray[i]);
var list = matchList.Cast<Match>().Select(match => match.Value).ToList();
resL.AddRange(list);
}
string[] res = resL.Distinct().ToArray();
if (res.Length > 0)
return res;
return new string[0];
} }
private async void FindButton_Click(object sender, RoutedEventArgs e) {
FindButton.Content = "Searching...";
FindButton.IsEnabled = false;
await Task.Delay(1);
try
{
string parsed = string.Empty;
if (string.IsNullOrWhiteSpace(new TextRange(InputField.Document.ContentStart, InputField.Document.ContentEnd).Text)) ;
{
OutputField.Document.Blocks.Clear();
MessageBox.Show("Empty input");
}
else
{
Parser nOb = new Parser(new TextRange(InputField.Document.ContentStart, InputField.Document.ContentEnd).Text);
string[] result = nOb.find();
if (result.Length == 0)
{
OutputField.Document.Blocks.Clear();
MessageBox.Show("Nothing found");
}
else
{
for (int i = 0; i < result.Length; i++)
{
parsed += result[i] + Environment.NewLine;
}
OutputField.Document.Blocks.Clear();
OutputField.Document.Blocks.Add(new Paragraph(new Run(parsed)));
MessageBox.Show("Success");
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}
FindButton.Content = "Default";
FindButton.IsEnabled = true;
}
Le problème est que lorsque le texte de inputField est vraiment grand et le programme essaie de trouver tous les matches interface utilisateur commence à geler. Il devient impossible de minimiser la fenêtre du programme, Windows dit que l'application ne répond pas et demande si je veux le fermer. Si je ne clique pas sur le programme pendant le travail, ça finit bien. Alors, est-il possible d'éviter le gel en quelque sorte et permettre de minimiser l'application alors qu'il fonctionne avec de grandes entrées? Toute aide est appréciée.
sans savoir ce que votre Task.Delay est pour nous ne pouvons pas vraiment aider. – Kelly