Witam
Piszę program który odgaduje ciąg znaków litera po literze i wyświetla go textboxie. Niestety napotkałem problem, mianowicie gdy klikam przycisk program wyświetla pojedynczą literę a nie całe hasło. Dodam także że do całej procedury używam bacgroundworkera. Po niżej zamieszczam kod. Z góry dziękuje za pomoc.
public Form1()
{
InitializeComponent();
backgroundWorker1 = new BackgroundWorker();
// backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.WorkerSupportsCancellation = true;
backgroundWorker1.DoWork += BackgroundWorker1_DoWork;
backgroundWorker1.RunWorkerCompleted += BackgroundWorker1_RunWorkerCompleted;
haslo = textBox2.Text;
}
BackgroundWorker backgroundWorker1;
int index = 0;
int i = 0;
string litery = "ABCDEFGHIJKLMNOPQRSTUVQXYZabcdefghijklmnopqrstuvqxyz";
string haslo;
private void BackgroundWorker1_DoWork(object? sender, DoWorkEventArgs e)
{
for (int i = 0; i < litery.Length - 1; i++)
{
if (!backgroundWorker1.CancellationPending)
{
try
{
this.Invoke((Action)delegate
{
if (textBox1.Text=="")
{
index = 0;
}
while (litery[i] == textBox2.Text[index] && textBox1.Text.Length >= index - 1)
{
if (textBox1.Text.Length - 1 <= index)
{
backgroundWorker1.CancelAsync();
index++;
textBox1.Text += litery[i].ToString();
textBox1.Select(index, textBox1.Text.Length - 1);
if (!backgroundWorker1.IsBusy)
{
backgroundWorker1.RunWorkerAsync();
}
}
else
{
// break;
}
}
});
}
catch
{
break;
}
}
}
}
private async void button1_Click(object sender, EventArgs e)
{
// Start odgadywania
if (!backgroundWorker1.IsBusy)
{
backgroundWorker1.RunWorkerAsync();
}
}
private void button2_Click(object sender, EventArgs e)
{
// Zatrzymywanie odgadywania
if (backgroundWorker1.IsBusy)
{
backgroundWorker1.CancelAsync();
i = -1;
}
}
5.
pętla też nie jest potrzebna: https://www.geeksforgeeks.org/c-sharp-replace-method/