我有一个棘手的问题,我无法解决,也没有我在msdn论坛上问过的人。
我正在使用第三部分产品(来自mitov.com的信号实验室),这是一组.net组件。 我创建了一个Windows窗体应用程序,如果运行它可以正常工作。 我现在想要在另一个表单加载(或显示或激活...)时从另一个表单中显示此表单。
我已经有了另一种形式的示例:这是典型的代码: 我正在从主程序中加载一个表单(SecondForm)...
private void SecondForm_Load(object sender, EventArgs e)
{
Form _macros = new Macros(this); //this works perfectly fine
_macros.show(this);
//this is where I have no success
Form _spectrum = new SpectrumScope;
_spectrum.Show();
}
我从没有显示的表单中得到各种错误,然后是一个关于不实例化_spectrum的异常,关于不允许交叉线程操作的错误,到蓝屏,其中有关于处理器之间没有同步时钟的消息。
如果我在“第二个表单”上放置一个按钮并将显示表单代码添加到click事件中,它可以正常工作。 如果我尝试使用form.activated,或者使用form而不是form.load,则没有区别。 如果我添加时间来表示已显示,然后执行button.performClick,则没有区别。
显然,包含许多组件的表单(以及场景后面的许多线程)不喜欢用户没有打开它的事实。
我对C#很新,我很确定这与线程有关。
感谢您的帮助。
答案 0 :(得分:0)
尝试使用表单加载方法中的强制代码,让.Net为您管理线程。
this.Invoke(new MethodInvoker(() => (new SpectrumScope).Show()));
答案 1 :(得分:0)
嗯,问题是解决的。但是,我真的不知道问题存在的原因。 在频谱形式中,我在第二种形式中引用静态变量。现在,我按如下方式使用它们:
string newFrequency = secondForm.frequency;
这很有效。但是,其中一些变量需要完成:
string newBandWidth = secondForm.bandwidth.substring(2,4);
这是失败的命令。我被告知我需要" new" keywork。
我改变了我的代码提供的字符串,而不需要获取子字符串,现在一切正常。 有人有什么想法吗?