Я закончил свой маленький проект, который делает тяжелый подъем. я понял, что в это короткое время вычисления мой графический интерфейс замерзает. Поэтому я провел некоторое исследование, и я нашел это =>http://www.codeproject.com/Articles/4381/Threading-out-tasks-in-a-C-NET-GUIЗапуск новой темы с помощью конструктора
Я начал реализовывать это мой проект, но я понял, что эта конкретная реализация не работает в моем проекте.
В моем проекте у меня есть много классов и один «менеджер», который контролирует все остальные классы. Если я инициализирую этот класс Менеджера, он уже делает тяжелый подъем в конструкторе.
На моем вопросе:
Как я начать новую тему с застройщиками?
private void fileWatcher_Changed(object sender, System.IO.FileSystemEventArgs e)
{
if (System.IO.File.Exists(e.FullPath) == true)
{
Manager mgr = new Manager(e, handreader); // here starts the heavy lifting
Thread mgrThread = new Thread(new ThreadStart(mgr)); // what to do ?
sl.Text = mgr.test();
txtLog.Text = mgr.output();
}
}
EDIT: хорошо я решил перекодировать свою программу. теперь тяжелый подъем в одной функции, но я думаю, что сделал ошибку.
вся программа выглядит следующим образом:
private void fileWatcher_Changed(object sender, System.IO.FileSystemEventArgs e)
{
if (System.IO.File.Exists(e.FullPath) == true)
{
Manager mgr = new Manager(e, handreader, txtLog, sl);
//sl.Invoke(new MethodInvoker(mgr.test));
sl.Invoke(new MethodInvoker(mgr.test)); // first try
Thread mgrThread = new Thread(new ThreadStart(mgr.test)); // second try
}
}
в sl.Invoke(new MethodInvoker(mgr.test)); // first try
работает, но он по-прежнему замораживает мой GUI.
Thread mgrThread = new Thread(new ThreadStart(mgr.test)); // second try
и эта линия ничего не делает.
моего тест функция:
public void test()
{
StringBuilder builder = new StringBuilder();
foreach (PlayerController pc in fm.lPc)
{
Range range = new Range(handReader.hand, handReader.handversus, pc);
builder.Append(pc.getHeroCardsSimple()+" vs 100% range = "+range.vsRange()+"\r\n");
}
sl.Text = builder.ToString();
}
Даже если это отвечает на главный вопрос, я согласен с Джоном: не делайте тяжелую работу в конструкторе! – ChrFin
Да, конечно, но это другой вопрос – Bas