Buenas,
estoy haciendo una pequeña aplicación como reto que me han propuesto sobre hacer una aplicación, al principio con un array con el abecedario en minúsculas y números, indicar la longitud del string y generar todas las posibles combinaciones con el array.
Hasta aquí bien, con una función recursiva lo he conseguido, el problema viene cuando pones más de 3 caracteres de longitud, donde se tira la vida para mostrar los resultados. Mi intención es que vayan saliendo en pantalla conforme se generan. Lo que no doy con el método.
Os muestro el código
Como variables globales tengo la longitud del carácter y el array.
int longi;
string[] posibles = new string[] {"0","1","2","3","4","5","6","7","8","9",
"a","b","c","d","e","f","g","h","i","j",
"k","l","m","n","o","p","q","r","s","t",
"u","v","w","x","y","z"};
Al tener el objeto listbox, he creado una función que no devuelve nada (void) y va añadiendo a la lista mediante un item add los resultados.
private void combinacion(string cadena, int longitud) {
string caracter;
string aux;
if (longitud == 0){
listBox1.Items.Add(cadena);
}else{
for (int i = 0; i < posibles.Length; i++)
{
caracter = posibles[i];
aux = cadena + caracter;
if(aux.Length == longi) listBox1.Items.Add(aux);
combinacion(aux, longitud - 1);
}
}
}
Y aquí el botón de acción por donde le paso los parámetros a la función
private void button1_Click(object sender, EventArgs e){
combinacion("", int.Parse(textBox1.Text));
longi = int.Parse(textBox1.Text);
MessageBox.Show("Ya ha terminado, hay "+listBox1.Items.Count+" combinaciones");
}
El problema como he dicho, es que no va escribiendo mediante va calculando, sino que se espera al final.
Se me ha ocurrido meterle un progressbar para que vaya indicando el progreso, pero la aplicación se queda parada mientras calcula. Eso no gusta!
Si alguien sabe como arreglarlo me daría una gran alegría
Saludoss.