Вы можете попробовать использовать асинхронный метод
using System.Threading.Tasks;
private async void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
await DoWorkAsync(e);
MessageBox.Show("Done!");
button1.Enabled = true;
}
private async Task DoWorkAsync(object value)
{
await Task.Run(() =>
{
//Some work
});
}
Однако вы можете сделать это с фоновым рабочим, как показано ниже:
using System.ComponentModel;
private BackgroundWorker _worker;
public Form1()
{
InitializeComponent();
_worker = new BackgroundWorker();
_worker.DoWork += (sender, args) =>
{
//i do something
};
_worker.RunWorkerCompleted += (sender, args) =>
{
MessageBox.Show("Done!");
button1.Enabled = true;
};
}
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
_worker.RunWorkerAsync(e);
}