我有一个带有按钮,标签和进度条的窗体,这样当我单击该按钮时,它将创建一个类b的实例来运行进程。一旦这个过程完成,它会调用一个EventHandler在主窗体的标签中显示“done”!为什么一个事件是空的? (对象引用未设置为对象的实例)
我创建了一个委托(SetStatus)的事件(SetStatusEvent)来做到这一点。它似乎很好,当我调用事件处理(usbforProcessExited)外的这个事件,但是当我把它从usbforProcessExited它给出了一个错误 -
object reference not set to an instance of an object
主要形式
public partial class main : Form
{
b rsSet = new b();
public main()
{
InitializeComponent();
rsSet.SetStatusEvent += new RemoteS.SetStatus(updateStatus);
}
private void button1_Click(object sender, EventArgs e)
{
rsSet.FormatUSB();
}
private delegate void UpdateStatus(int i, string str, Color clr);
private void SetStatus(int i, string str, Color clr)
{
this.progressBar1.Value = i;
this.lbl_status.ForeColor = clr;
this.lbl_status.Text = str;
}
private void updateStatus(int i, String msg, Color color)
{
object[] p = GetInokerPara(i, msg, color);
BeginInvoke(new UpdateStatus(SetStatus), p);
}
private object[] GetInokerPara(int progress, string msg, Color color)
{
object[] para = new object[3];
para[0] = progress;
para[1] = msg;
para[2] = color;
return para;
}
}
乙级
class b
{
public delegate void SetStatus(int i, string msg, Color color);
public event SetStatus SetStatusEvent;
System.Diagnostics.Process usbfor = new System.Diagnostics.Process();
public void FormatUSB()
{
usbfor.StartInfo.FileName = @"usbformat.bat";
usbfor.EnableRaisingEvents = true;
usbfor.Exited += new EventHandler(usbforProcessExited);
usbfor.Start();
}
public void usbforProcessExited(object sender, EventArgs f)
{
SetStatusEvent(100, "DONE", Color.Green); //ERROR HERE! (object reference not set to an instance of an object
}
}
问题在哪里?
你应该学会产生最少的工作例子。你的代码包含很多与这个问题无关的东西。 – CodesInChaos
我不认为这是你的问题的原因,但你不需要“usbfor.EnableRaisingEvents = true”的过程来提高退出事件? –
@ChrisSpicer OPS!其实我有这条线!我只是想尽量减少我发布的代码量。谢谢你提到那个部分。 – daygoor