在Mac OS X上使用C#Mono的随机GUI错误
我正在C#(Windows窗体)中开发应用程序,该应用程序使用Mono在Mac OS X上运行。 它包含一些动态控件,例如包含一个自定义groupbox一些标签和文本框,一个按钮等。这些框都可以动态添加和删除。在Mac OS X上使用C#Mono的随机GUI错误
我CustomGrpBx
从GroupBox
继承,这是我用的构造器:
public CustomGrpBx(Point CreateHere,Info Inf)
{
this.Name = Inf.Name;
this.Location = CreateHere;
CreateHere.Y = 10;
CreateHere.X = 10;
CreateHere.Y += 7;
Button btnPress = new Button();
btnPress.Location = CreateHere;
btnPress.Size = new Size(40, 24);
btnPress.Text = Name;
btnPress.Enabled = false;
this.Controls.Add(btnPress);
CreateHere.X += 45;
CreateHere.Y += 2;
TextBox txtName = new TextBox();
txtName.Location = CreateHere;
txtName.Size = new Size(75, 20);
txtName.Text = Name;
txtName.ReadOnly = true;
this.Controls.Add(txtName);
CreateHere.X += 80;
//More code here, but the same pattern as above
this.Size = new Size(CreateHere.X + 30, CreateHere.Y + 35);
}
,问题就出现两个当他们被创建,删除,甚至当显示一个消息框。 会发生什么情况是,有时在呈现白色框时出现,或者某些标签绘制不正确。有时当一个消息框出现时,它会首先打开,就像空白的5个傻瓜,你不能关闭它。
我做错了什么,我应该在每次创建后睡觉GUI线程,还是应该让我自己的东西无效?或者我应该尝试GTK#?
非常感谢在此输入。
很难在没有看到实际代码的情况下提供建议,但首先,如果您主要开发了针对.NET平台的项目,请首先检查您的程序集是否存在不兼容问题(例如,pinvoke的问题)。然后,mono团队宣称Windows单窗口支持已完成:
对Windows Forms 2.0的支持已完成。在这一点上,我们主要是修复bug和抛光我们的代码。
因此,您可以尝试在.NET下运行您的项目,并查看错误是否仍然存在。
至于Gtk#。我认为如果项目的主OS是OSX,最好使用gtk#。至少你可以使用一些OSX特定的东西,例如,集成在它的工具栏中。查看here,了解Gtk#项目的开源示例,该项目使用一些本机OSX功能并在其环境中良好集成。 MonoDevelop的设计者也支持gtk#。
添加代码示例 而且我在windows中使用相同的代码获得零问题,而且MoMa不会给我带来任何错误:/ – 2010-04-20 13:21:43
嗯,说实话,我没有看到任何与您的错误相关的内容。 – n535 2010-04-20 13:40:02
我会尽力在下次在Mac上获取它的打印屏幕。 是否应该将prob报告给mono团队? – 2010-04-20 13:41:32
非常标准的违反规则穿线的迹象。只在主UI线程中更新/显示UI组件,请使用Control.Begin/Invoke()来封送调用。 – 2010-04-20 13:20:39
我正在使用背景工作器,但那个只能在另一个类的静态工作,而不是直接使用gui对象。 – 2010-04-20 13:24:19