Здесь есть несколько проблем.
- Нет необходимости запускать форму в другом потоке, что может привести к непредвиденным последствиям
- Вы находитесь в потоке пользовательского интерфейса, вы передаете свою работу другому потоку, приостанавливаете поток в потоке пользовательского интерфейса и блокируете рассылку сообщений ... хмммм.
- Почему вы используете тему? Получить с тысячелетия и использовать задачи
- Это могут быть
async
и await
. Однако, давайте пока отложим это
Program.cs
// lets start normally
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new DrawForm ());
}
Самый простой способ сделать это будет
Thread t1 = new Thread(() =>
{
MyMethod();
Thread.Sleep(2000); //pausing the right thread
);
Однако вы могли бы сделать это
private void CallToRun(object sender, EventArgs e)
{
// runs concurrently
Task.Run(
() =>
{
while (true) // woah are you sure you want to run this forever?
{
MyMethod();
//doesn't pause the message pump
Thread.Sleep(2000);
}
});
}
Однако в современном мире мы можем использовать шаблон async
и await
в одной из его различных форм
Пример * +1031 ** * одна тысяча тридцать две
private async Task CallToRun(object sender, EventArgs e)
{
while (true) // woah this stil smells
{
MyMethod();
await Task.Delay(2000); // not pausing the message pump, yay
}
}