#c# #forms
#c# #формы
Вопрос:
Я пытаюсь открыть form2 из асинхронной задачи в form1. Когда я пытаюсь открыть его с помощью:
public void DoWorkPollingTask()
{
Form f2 = new Form2();
Task.Run(async () =>
{
while (true)
{
f2.Show();
await Task.Delay(10000);
}
});
}
Пожалуйста, не смущайтесь этой ошибкой подключения к Интернету. Это не фактическое всплывающее окно из Visual Studio, это просто мой form2, но проблема в том, что он загружен не полностью, как вы можете видеть на этом изображении. Это должно выглядеть так:
Есть ли какой-либо способ показать form2 из задачи таймера задачи, которая выполняется каждые x секунд?
Комментарии:
1. Код: hastebin.com/ehulavotoj.cs
2. Скорее используйте модальную форму:
f2.ShowDialog()
без какой-либо задачи.3. @OpenSource, можете ли вы объяснить, почему вы используете while(true) и Task . Задержка из-за того, что она изменяет ваш пользовательский интерфейс, для меня это не имеет смысла.
4. @sayahimad Почему вы думаете, что это заморозит пользовательский интерфейс?
Ответ №1:
Вы пытаетесь получить доступ к элементам пользовательского интерфейса из потока, отличного от пользовательского интерфейса, и это подразумевает, что это вызовет множество проблем.
Просто не используйте поток пула потоков, так как здесь вообще нет причин для этого.
public async void DoWorkPollingTask()
{
Form f2 = new Form2();
while (true)
{
f2.Show();
await Task.Delay(10000);
}
}
Есть ли какой-либо способ показать form2 из задачи таймера задачи, которая выполняется каждые x секунд?
Вы могли бы использовать фактический таймер, если хотите. Код уже очень прост, но если вы просто предпочитаете использовать таймер, тогда используйте таймер. Просто убедитесь, что вы используете таймер, предназначенный для работы с фреймворком пользовательского интерфейса, а не один из системных таймеров, чтобы он запускал событие в потоке пользовательского интерфейса.