0

我在这里有一个棘手的问题,我无法解决,我在 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 的异常,到关于不允许跨线程操作的错误,到蓝屏并显示有关处理器之间时钟未同步的消息。

如果我在“第二表单”上放置一个按钮并将显示表单代码添加到点击事件,它工作正常。如果我尝试使用 form.activated 或显示的表单而不是 form.load,则没有区别。如果我在表单 Shown 中添加时间,然后执行 button.performClick,则没有区别。

显然,包含许多组件(以及幕后的许多线程)的表单不喜欢它没有被用户打开的事实。

我对 C# 相当陌生,我很确定这与线程相关。

感谢您的任何帮助。

4

2 回答 2

0

在您的表单加载方法中尝试使用 Blow 代码,这应该让 .Net 为您管理线程。

this.Invoke(new MethodInvoker(() => (new SpectrumScope).Show()));
于 2013-11-14T03:51:41.737 回答
0

嗯,问题解决了。但是,我真的不知道为什么会出现这个问题。在频谱形式中,我在第二种形式中引用静态变量。现在,我按如下方式使用它们:

字符串 newFrequency = secondForm.frequency;

这行得通。但是,其中一些变量需要完成此操作:

字符串 newBandWidth = secondForm.bandwidth.substring(2,4);

这是失败的命令。有人告诉我我需要“新”键。

我更改了代码提供了字符串,而无需获取子字符串,现在一切正常。有人有什么想法吗?

于 2013-11-15T20:15:10.000 回答