Сохранение цветов кнопок в соответствии с асинхронной работой, проблемC#

Место общения программистов C#
Anonymous
Сохранение цветов кнопок в соответствии с асинхронной работой, проблем

Сообщение Anonymous »

Я пытаюсь установить цвет кнопки, пока процесс находится в процессе, но цвет кнопки меняется только при первом щелчке его, если он дает ошибку, он остается красной (даже если процесс продолжается), если он не дает ошибки, он, наконец, изменяется в цвет. Тем не менее, сейчас цвет кнопки ведет себя следующим образом: < /p>
На первом щелчке: < /p>
Цвет кнопки изменяется на цвет, который вы хотите (Color.fromargb (114, 121, 128) и Color.fromargb (88, 89, 130)). происходит во время процесса, цвет кнопки меняется на красный и не изменяется, даже если процесс продолжается. < /p>
При успехе: < /p>
Если процесс успешно, он изменяется на цвета, которые вы указали в блоке, наконец, < /p>
private async void metroSetButton1_Click(object sender, EventArgs e)
{
metroSetButton1.Enabled = false;
metroSetButton2.Enabled = false;

metroSetButton1.NormalTextColor = Color.FromArgb(114, 121, 128);
metroSetButton1.NormalColor = Color.FromArgb(88, 89, 130);

label2.Text = "Loglar ayıklanıyor...";
progressBar1.Value = 5;
progressBar1.Visible = true;

listBox1.ContextMenuStrip = null;
bool isSuccess = false;

try
{
if (listBox1.Items.Count == 0 || string.IsNullOrWhiteSpace(textBox1.Text))
{
MessageBox.Show("Lütfen önce dosya seçin ve filtreleme için kelime(ler) girin.", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Warning);
progressBar1.Value = 0;
label2.Text = "Hata: Dosya veya kelime eksik!";

metroSetButton1.NormalColor = Color.FromArgb(200, 50, 50);
metroSetButton1.HoverColor = Color.FromArgb(220, 60, 60);
metroSetButton1.PressColor = Color.FromArgb(180, 40, 40);
metroSetButton1.NormalTextColor = Color.White;

metroSetButton2.NormalColor = Color.FromArgb(200, 50, 50);
metroSetButton2.HoverColor = Color.FromArgb(220, 60, 60);
metroSetButton2.PressColor = Color.FromArgb(180, 40, 40);
metroSetButton2.NormalTextColor = Color.White;

metroSetButton1.Enabled = true;
metroSetButton2.Enabled = true;

return;
}

else
{
metroSetButton1.NormalTextColor = Color.FromArgb(114, 121, 128);
metroSetButton1.NormalColor = Color.FromArgb(88, 89, 130);
}

SaveFileDialog saveFileDialog = new SaveFileDialog
{
Filter = "Metin Dosyası|*.txt",
FileName = "RLogX.txt"
};

if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
string savePath = saveFileDialog.FileName;
List keywords = textBox1.Lines
.SelectMany(line => Regex.Split(line, @"[\s,;]+"))
.Where(k => !string.IsNullOrWhiteSpace(k))
.ToList();

List matchedLines = new List();
int totalFiles = listBox1.Items.Count;
int processedFiles = 0;

await Task.Run(() =>
{
foreach (var item in listBox1.Items)
{
try
{
string filePath = item.ToString().Split(new string[] { "-->" }, StringSplitOptions.None).Last().Trim();
string extension = Path.GetExtension(filePath).ToLower();

if (extension == ".txt" || extension == ".json" || extension == ".log" || extension == ".xml" || extension == ".csv")
{
ProcessTextFile(filePath, keywords, matchedLines);
}
else if (extension == ".zip")
{
ExtractAndProcessZip(filePath, keywords, matchedLines);
}
else if (extension == ".rar")
{
ExtractAndProcessRar(filePath, keywords, matchedLines);
}
else if (extension == ".7z" || extension == ".tar.gz")
{
ExtractAndProcess7zOrTarGz(filePath, keywords, matchedLines);
}
}
catch (Exception ex)
{
matchedLines.Add($"Hata oluştu: {ex.Message}");
}

Interlocked.Increment(ref processedFiles);
int progressPercentage = (processedFiles * 100) / totalFiles;

this.Invoke(new Action(() =>
{
progressBar1.Value = 5;
label2.Text = $"İşlem devam ediyor... ({processedFiles}/{totalFiles})";
metroSetButton1.NormalTextColor = Color.FromArgb(114, 121, 128);
metroSetButton1.NormalColor = Color.FromArgb(88, 89, 130);
Application.DoEvents();
}));
}
});

File.WriteAllLines(savePath, matchedLines);
MessageBox.Show($"Filtrelenmiş veriler {savePath} olarak kaydedildi.", "Başarılı", MessageBoxButtons.OK, MessageBoxIcon.Information);

isSuccess = true;
}
}
catch (Exception ex)
{
MessageBox.Show($"Beklenmeyen bir hata oluştu: {ex.Message}", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
progressBar1.Value = 100;
progressBar1.ForeColor = Color.Red;
label2.Text = "Hata: İşlem sırasında beklenmeyen bir hata oluştu!";

metroSetButton1.NormalTextColor = Color.FromArgb(114, 121, 128);
metroSetButton1.NormalColor = Color.FromArgb(88, 89, 130);
}
finally
{
listBox1.ContextMenuStrip = contextMenuStrip1;
metroSetButton1.Enabled = true;
metroSetButton2.Enabled = true;

if (isSuccess)
{
metroSetButton1.NormalColor = Color.FromArgb(68, 71, 210);
metroSetButton1.HoverColor = Color.FromArgb(78, 81, 230);
metroSetButton1.PressColor = Color.FromArgb(68, 71, 203);
metroSetButton1.NormalTextColor = Color.White;

metroSetButton2.NormalColor = Color.FromArgb(68, 71, 210);
metroSetButton2.HoverColor = Color.FromArgb(78, 81, 230);
metroSetButton2.PressColor = Color.FromArgb(68, 71, 203);
metroSetButton2.NormalTextColor = Color.White;
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... ke-problem

Вернуться в «C#»