Я просмотрел разные вопросы, но никто из них, похоже, не применим. Это VS2010, работающий в системе Windows 7 64Bit.
Недавно я добавлял код в форму, которая работает в течение нескольких месяцев. Я внес некоторые изменения в событие активации. Внезапно он начал бросать исключение во время выполнения. Не в отладчике. Если я установил отладчик JIT runtime (т.е. system.windows.forms jitDebugging = "true"), ошибка также исчезнет (на моей машине разработки, я предполагаю, потому что она установлена VS2010, но не на клиентской машине)
Конечно, я отказался от своего кода (раскомментировал его), но сообщение об ошибке остается. Поскольку отладчик не вызывает каких-либо исключений, я не знаю, где проблема.
Я попытался включить исключения Common Language Runtime Exceptions, но он все еще не видит никаких ошибок.
Я поместил строки отладки и отправил их в файл. Вызывается событие Activate, но событие Shown, кажется, не вызывается до того, как будет выбрано исключение. У меня нет каких-либо методов для чего-либо, кроме Shown now... но моя отладочная запись не попадает в файл до того, как будет выбрано исключение, поэтому, если проблема в этом методе, я понятия не имею, где.
Полная ошибка, которая отображается:
System.InvalidCastException: Specified cast is not valid.
at System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid& clsid, Object punkOuter, Int32 context, Guid& iid)
at System.Windows.Forms.StringSource..ctor(String[] strings)
at System.Windows.Forms.TextBox.SetAutoComplete(Boolean reset)
at System.Windows.Forms.TextBox.OnHandleCreated(EventArgs e)
at System.Windows.Forms.Control.WmCreate(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.TextBoxBase.WndProc(Message& m)
at System.Windows.Forms.TextBox.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
[EDIT] Показанный способ:
int shownHeight = -1;
int shownTop = -1;
int ButtonOneTop = -1;
int MagnifiedPanelTop = -1;
int MagnifiedPanelHeight = -1;
int SelectedStateTop = -1;
private void VoiceCommandInput_Shown(object sender, EventArgs e)
{
_ThisForm = this;
VoiceTextbox.CharacterCasing = CharacterCasing.Upper; ;
voiceCommandButton.Focus();
_ThisForm.Height = MagnifiedPanel.Height + 38;
keyboardPanel.Top = MagnifiedPanel.Bottom + 2;
int chkptone = button1.Top;
shownHeight = _ThisForm.Height;
_ThisForm.Height = shownHeight + AdvancedButtonsPanel.Height + 10;
shownTop = _ThisForm.Top;
ButtonOneTop = chkptone;
MagnifiedPanelTop = MagnifiedPanel.Top;
MagnifiedPanelHeight = MagnifiedPanel.Height;
SelectedStateTop = selectedState.Top;
AdvancedButtonsPanel.Top = selectedState.Bottom + 20;
AdvancedButtonsPanel.Visible = true;
AdvancedButtonsPanel.BringToFront();
keyboardPanel.Top = AdvancedButtonsPanel.Bottom + 20;
BKD_buttonPusher.WorkerReportsProgress = true;
BKD_buttonPusher.WorkerSupportsCancellation = true;
BKD_buttonPusher.DoWork += new DoWorkEventHandler(this.buttonPusher_DoWork);
BKD_buttonPusher.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.buttonPusher_RunWorkerCompleted);
VoiceTextbox.Focus();
}
Я вставляю здесь комментарий @hvd, потому что он может помочь кому-то
Быстрый поиск в Google вызывает это, и если вы сделали что-то вроде описанного там (удалили [STAThread]
из Main или настроили элементы управления пользовательского интерфейса из фоновых потоков), я могу представить, что он потерпит неудачу, и я также могу представить, что, казалось бы, нерелевантные изменения, такие как прикрепление отладчика, могут настраивать поток тонко по-разному, заставляя его не бросать исключения.