Guten Abend,
Ich habe spaßeshalber eine Windows Forms Anwendung programmiert, in der via Button-Klick eine sehr aufwändige rekursive Funktion (Fibunacci) berechnet wird, das ist nicht weiter spannend. Interessant ist hingegen, dass die Anwendung einfriert sobald ich einen großen Wert eingebe (die rekrursive Variante wurde genau deshalb verwendet, um dieses Verhalten zu reproduzieren). Meine Frage ist, wie kann man es erreichen, dass die Forms Anwendung noch immer benutzbar ist und die Berechnung im Hintergrund abläuft?
Hier einmal mein Quelltext:
Ich habe spaßeshalber eine Windows Forms Anwendung programmiert, in der via Button-Klick eine sehr aufwändige rekursive Funktion (Fibunacci) berechnet wird, das ist nicht weiter spannend. Interessant ist hingegen, dass die Anwendung einfriert sobald ich einen großen Wert eingebe (die rekrursive Variante wurde genau deshalb verwendet, um dieses Verhalten zu reproduzieren). Meine Frage ist, wie kann man es erreichen, dass die Forms Anwendung noch immer benutzbar ist und die Berechnung im Hintergrund abläuft?
Hier einmal mein Quelltext:
C#-Quellcode
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace WindowsFormsApp2
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- for(int i = 0; i < 10; i++)
- {
- MessageBox.Show("" + fibu(i), "W");
- }
- }
- public static int fibu(int n)
- {
- if(n == 1)
- {
- return 1;
- }
- if (n == 2)
- {
- return 1;
- }
- else
- {
- return fibu(n - 2) + fibu(n - 1);
- }
- }
- private void button2_Click(object sender, EventArgs e)
- {
- int x = Convert.ToInt32(textBox1.Text);
- textBox2.Text = "Erg: " + fibu(x);
- }
- }
- }