У меня возникла небольшая проблема, на которую я поставил вопрос, и я надеялся, что кто-нибудь сможет пролить свет на это. У меня есть Form
с именем form2
, и я запускаю некоторый код для добавления некоторых элементов в Listview(s)
этой формы, используя MethodInvoker
, так что поток пользовательского интерфейса остается отзывчивым, пока я так делаю.
В первый раз все работает нормально, но потом , когда я закрываю эту форму (ту, на которой есть ListView) и снова запускаю свой код Я получаю InvalidOperationException: Invoke or BeginInvoke cannot be called on a control until the window handle has been created
.
Итак, я посмотрел на это и немного погуглил, а также посмотрел на StackOverflow и обнаружил, что проблема вызвана тем, что в форме не было создано дескриптора для нее, поскольку она удаляется при закрытии в первый раз.
Таким образом, мое решение состояло в том, чтобы заставить форму установить дескриптор для себя через CreateControl()
. Даже после этого моя форма все еще не устанавливает дескриптор, когда я проверяю его в разрыве из исключения. У него 00x0000000
или что-то в этом роде, и я все еще получаю InvalidOperationException
. Я также попытался проверить .isDisposed()
и попытался использовать CreateControl()
после этого безуспешно. Кто-нибудь из вас слышал об этом раньше? Другие потоки на SO не дают никаких решений для меня.
Мой код:
if (!form2.IsHandleCreated)
{
form2.CreateControl();
}
form2.Invoke((MethodInvoker) delegate
{
//Do Stuff Here.
}