버튼을 클릭하면 프로세스를 실행하는 클래스 b의 인스턴스를 만들 수 있도록 버튼, 레이블 및 진행률 막대가있는 양식이 있습니다. 프로세스가 완료되면 EventHandler를 호출하여 메인 폼의 레이블에 "done"을 표시합니다!이벤트가 null이되는 이유는 무엇입니까? (객체 참조가 객체의 인스턴스로 설정되지 않음)
이렇게하려면 대리인 (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;
}
}
클래스 B
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
문제의 원인이라고 생각하지 않지만 Exited 이벤트를 발생시키는 프로세스에 "usbfor.EnableRaisingEvents = true"가 필요하지 않습니까? –
@ChrisSpicer OPS! 실제로 나는 그 선을 가지고있다! 나는 방금 게시 한 코드의 양을 최소화하려고 노력했다. 그 부분을 언급 해 주셔서 감사합니다. – daygoor