A possible solution is to use async-await (in .NET Framework above 4.5).
I created this quick example in .NET Framework 4.6.1
In this case, the winform does not freeze when waiting for "Say Hello" after button click, and you can move the GUI freely when it waits. Perhaps this async-await pattern is suitable in your case. I suggest to try it,
public partial class Form1 : Form
private async void button1_Click(object sender, EventArgs e)