【发布时间】:2015-02-12 18:18:50
【问题描述】:
C# 新手。就像标题一样,我在尝试提出事件时遇到了困难。它最终会以另一种形式消费。
我想要做的是创建一个 tcp 客户端、连接然后关闭的自定义用户控件(我的事件引发表单)的许多实例。当此 tcp 客户端出现“错误”时,无论是捕获异常,我都希望引发一个事件。我现在通过关闭互联网进行测试来强制错误。我的第一个问题是我什至根本无法提出该事件。我将在自定义用户控件上显示我正在使用的事件代码:
public delegate void TaskCompleteEventHandler(object sender, TaskCompleteEventArgs e);
public event TaskCompleteEventHandler TaskComplete;
public class TaskCompleteEventArgs : System.EventArgs
{
// add local member variables to hold text
private string errorString;
// class constructor
public TaskCompleteEventArgs(string ErrorString)
{
this.errorString = ErrorString;
}
// Property
public string ErrorString
{
get
{
return errorString;
}
set
{
errorString = value;
}
}
}
这是我处理异常的方法,理想情况下会引发事件并允许主机表单相应地打印字符串和异常。
private void ErrorLogging(string ex)
{
errorString = String.Format(/*...errorString formatting...*/);
// instance the event args and pass it the errorString value
TaskCompleteEventArgs args = new TaskCompleteEventArgs(errorString);
// raise the event with the updated arguments
TaskComplete(this, args); //----> THIS IS WHERE I GET AN ERROR!! <----
this.Dispose();
}
错误是Object reference not set to an instance of an object.
这是我的TaskComplete(this, args) 的手表屏幕
我似乎无法调试这个...我只是不够强大,还不知道我做错了什么。它是如何引起副作用的?
我确定当我开始执行此操作时,我的主窗体上会出现更多问题......有人知道是什么原因造成的吗?提前致谢。
编辑:在我的主要表单上:
public Form1()
{
InitializeComponent();
// Start control disabled and subscribe each control the event
foreach (var control in controlList)
{
control.Enabled = false;
control.TaskComplete += new dev_emu_project.dev_emu_widget.TaskCompleteEventHandler(OnTaskComplete);
}
}
List<dev_emu_project.dev_emu_widget> controlList = new List<dev_emu_project.dev_emu_widget>();
public void OnTaskComplete(object sender, dev_emu_project.TaskCompleteEventArgs e)
{
//.... work for processing
}
}
【问题讨论】: