加载后立即关闭windows窗体
由于某种原因,我的Windows窗体在运行程序后立即关闭。我可以看到表格大约一秒钟,然后关闭。这里是我的形式加载方法加载后立即关闭windows窗体
private void Form1_Load(object sender, EventArgs e)
{
CustGen = new CustomerGenerator();
fuelType = null;
//set data on form initialization.
unleadedtank = 10000f;
dieseltank = 10000f;
u_price = 136.9f;
d_price = 152.2f;
//event subscriptions
CustGen.CustomerReady += CustomerReadySub; //Subscribes to ready event
CustGen.PumpProgress += PumpProgressSub; //subscribes to progress event
CustGen.PumpingFinished += PumpingFinishedSub; //subscribes to stop event
}
,这里是我的针对特定形式的Program.cs,虽然这是自动生成的,我不知道是否需要它。
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
这是customerGenerator类
public class CustomerGenerator
{
public CustomerGenerator();
public event CustomerGenerator.CustomerReadyHandler CustomerReady;
public event CustomerGenerator.PumpingFinishedHandler PumpingFinished;
public event CustomerGenerator.PumpProgressHandler PumpProgress;
public void ActivatePump();
public void Start();
public delegate void CustomerReadyHandler(object sender, CustomerReadyEventArgs e);
public delegate void PumpingFinishedHandler(object sender, EventArgs e);
public delegate void PumpProgressHandler(object sender, PumpProgressEventArgs e);
}
我已经运行该程序,并开展哪些用户之一,在下面的意见后说碰到这个来到之内。
public void CustomerReadySub(object sender, CustomerReadyEventArgs fuel)
{
string CustReady = null;
//checks what fuel is chosen and then activates the pump
fuelType = fuel.SelectedFuel.ToString();
if (!String.IsNullOrEmpty(fuelType))
{
fTypeLabel.Text = fuelType;
这是抛出异常的线。另外它说:“跨线程操作无效:控制'Form1'从一个线程访问,而不是它创建的线程。”
fuelType = fuel.SelectedFuel.ToString();
感谢
而且它说:“跨线程操作无效:控制‘Form1的’从比它创建的线程以外的线程访问”
使用以下方式来访问你的窗体上的控件:
private void MyHandler(object sender, EventArgs e) {
if (InvokeRequired) Invoke(new EventHandler(MyHandler), sender, e);
else {
// code to handle the event
}
}
当你听从那些在一个线程中执行某些对象发生的事件,处理该事件将运行的代码那个线程。每当你从除创建这些对象的线程之外的线程访问UI对象时,你将会得到一个异常。 InvokeRequired检查是否在UI线程上运行,如果不是,则调用此方法以在UI线程上运行。这使您可以安全地访问控件。
嗨安德烈亚斯, 感谢您的意见,我只是想知道如果我做到了这一点的权利......如果你在上面看我的原始帖子我有一个CustomerReadySub,我只需将MyHandler更改为CustomerReadySub? – DorkMonstuh 2013-04-21 23:41:02
由于您使用自定义事件参数'new EventHandler(MyHandler)'不起作用,您必须使用适当的委托构造函数,例如'新的EventHandler
如何显示初学者的所有相关代码..? – MethodMan 2013-04-21 22:03:24
如果你删除Form1_Load的正文,它的工作原理? – 2013-04-21 22:03:25
你有没有通过代码..?如何定义'CustGen = new CustomerGenerator();' – MethodMan 2013-04-21 22:04:14