Странные ошибки
В Winforms 2.0 появилось семейство свойств AutoComplete у таких элементов управления, как TextBox, ComboBox и пр.
protected override void SetupAutoCompleteFeatures()
{
CountryTextBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
CountryTextBox.AutoCompleteCustomSource = AutoCompleteData;
CountryTextBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
}
Однако, не всё так хорошо. Списки, которые приходится грузить, довольно длинны, а размер файла с базой MS Access (200МБ) не позволяет драйверу получать наши десятки тысяч записей быстро. Поэтому загрузка производится в потоках: форма начинает загружаться, запускается поток, в потоке заполняется коллекция для AutoCompleteCustomSource. В методе асинхронного завершения вызывается установка считанной коллекции в качестве источника. Прекрасно прокатывает с TextBox, а ComboBox - нет. С ошибкой: "Current thread must be set to single thread apartment (STA) mode before OLE calls can be made". Особо времени разбираться не было, поэтому, выяснив, что с TextBox такого не происходит никогда, просто заменил ComboBox -> TextBox на формах и проблема ушла. На досугах погляжу, что это на самом деле означает.
2 комментария:
из МСДНа:
The main application thread is initialized to ApartmentState.MTA by default. The only way to set the apartment
state of the main application thread to ApartmentState.STA is to apply the STAThreadAttribute attribute to the
entry point method.
Thread t = new Thread(ThreadProc);
t.SetApartmentState(ApartmentState.STA);
t.Start();
Не прошло и года
Отправить комментарий