• Бесплатный ВЕБИНАР по OSINT с Екатериной Тьюринг: ➡️9 февраля в 19:00 (мск) пройдет урок

    Как безопасно искать информацию в открытых источниках

    🔥 Записаться 🔥

Открытие окна в новом потоке. Winforms

  • Автор темы Автор темы JEF
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
J

JEF

Есть основное окно, на котором находиться кнопка, и другие контролы. При её нажатии обрабатывается достаточное большое количество данных и эти данные выводяться в новой форме(окне). Как сделать так, чтобы при обработке данных основное окно не зависало и продолжало взаимодействовать с пользователем?

Сделал попытку такого рода, но в этом случае второе окно открывается, и сразу исчезает.
Код:
public partial class Main : Form
{
private Thread allFuncCalc;
public Main(string[] args)
{
//...много кода
allFuncCalc = new Thread(AllFuncCalc) {Name = "Function from textbox calculation"};
}
private void ViewFunctionButtonClick(object sender, EventArgs e)
{
allFuncCalc.Start();
}
private void AllFuncCalc()
{
Distribution.RandomQuantity randomQuantityToView = new Distribution.RandomQuantity(/*Параметры конструктора*/)
//......Много кода
View view = new View(randomQuantityToView) {Text = randomQuantityToView.DistributionType};
view.Show();
}
}
Если использовать делегаты и методы BeginInvoke и EndInvoke. То второе окно открывается, но становится зависшей. То же самое если использовать System.Threading.Tasks.Task.Factory .StartNew()
 
Я думаю, тебе нужно новое окно открыть от основного потока. Т.е. вызвать Invoke у основной формы и в делегате вызвать Show, тогда при закрытии потоков не будет закрываться форма
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!