Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 指定的强制转换在运行时无效,但在调试器中无效_C#_.net_Winforms_Visual Studio 2010 - Fatal编程技术网

C# 指定的强制转换在运行时无效,但在调试器中无效

C# 指定的强制转换在运行时无效,但在调试器中无效,c#,.net,winforms,visual-studio-2010,C#,.net,Winforms,Visual Studio 2010,我看了不同的问题,但似乎没有一个是适用的。这是在Windows 7 64位系统上运行的VS2010 我最近向一个运行了几个月的表单添加了代码。我对激活事件进行了一些更改。突然,它开始在运行时抛出异常。不在调试器中。如果我设置了JIT运行时调试器(即system.windows.forms jitdegbugger=“true”),错误也会消失(在我的开发机器上,我猜是因为它安装了VS2010,但在客户端机器上没有) 当然,我退出了代码(取消注释),但错误消息仍然存在。因为调试器没有抛出任何异常,

我看了不同的问题,但似乎没有一个是适用的。这是在Windows 7 64位系统上运行的VS2010

我最近向一个运行了几个月的表单添加了代码。我对激活事件进行了一些更改。突然,它开始在运行时抛出异常。不在调试器中。如果我设置了JIT运行时调试器(即system.windows.forms jitdegbugger=“true”),错误也会消失(在我的开发机器上,我猜是因为它安装了VS2010,但在客户端机器上没有)

当然,我退出了代码(取消注释),但错误消息仍然存在。因为调试器没有抛出任何异常,所以我不知道问题出在哪里

我已经尝试打开公共语言运行时异常,但仍然没有看到任何错误

我放入调试行并将其发送到一个文件中。已调用Activate事件,但在引发异常之前似乎未调用显示的事件。我没有为任何东西定义任何方法,除了现在显示的。。。但是,在抛出异常之前,我的调试写入不会被放入文件中,因此,如果问题出在该方法中,我不知道在哪里

显示的完整错误为:

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)
[编辑] 所示方法:

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的评论贴在这里,因为它可以帮助别人


一个快速的谷歌搜索就会出现,如果你做了与上面描述的类似的事情(从主线程中删除
[STAThread]
,或者从后台线程中设置UI控件),我可以想象它会失败,我也可以想象,似乎不相关的更改,例如附加调试器,可能会以微妙的方式设置线程,确保它不会抛出异常。

同时共享代码我不确定要共享什么代码。。。?我不确定问题出在哪里。完整的表格?完整显示的方法?我应该分享什么?
unsafentivemethods.CoCreateInstance
表明它与非C代码相关。正在调用某些DLL/COM组件/非.net代码。复制代码,注释掉所有非异常生成代码并缩小问题范围。bjan:“所有非异常生成代码”是一个挑战,因为我不知道在哪里生成异常。(如果调试器真的会抛出一个异常,那就太好了…)我最初添加的代码确实有COM代码——各种各样的DLL导入,因为无论发生什么情况,我都会将表单强制到顶部。那就是事情变得糟糕的时候。但我取消了所有这些注释,问题仍然存在。1-除非客户端出现异常,否则请继续注释行2-您可能更改了项目的属性(添加了一些引用,更改了一些配置等)所以,创建一个新项目,并保持从旧到新的复制行,除非抛出异常。对我来说是“从后台线程设置UI控件”。我删除了那个代码,错误就消失了。