Rod*_*ton 5 c# delegates invoke nullreferenceexception
如果我在调用期间尝试将null参数传递给委托,则会出现null异常.这是代码的样子:
public void RequestPhoto()
{
WCF.Service.BeginGetUserPhoto(Contact.UserID,
new AsyncCallback(RequestPhotoCB), null);
}
public void RequestPhotoCB(IAsyncResult result)
{
var photo = WCF.Service.EndGetUserPhoto(result);
UpdatePhoto(photo);
}
public delegate void UpdatePhotoDelegate(Binary photo);
public void UpdatePhoto(Binary photo)
{
if (InvokeRequired)
{
var d = new UpdatePhotoDelegate(UpdatePhoto);
Invoke(d, new object[] { photo });
}
else
{
var ms = new MemoryStream(photo.ToArray());
var bmp = new Bitmap(ms);
pbPhoto.BackgroundImage = bmp;
}
}
问题在于:
Invoke(d, new object[] { photo });
如果变量"photo"为null.在调用期间传递null参数的正确方法是什么?谢谢!
只是为了其他人的利益,您可以将空参数传递给委托(如果类型允许?此处需要澄清)。在您的情况下,IAsyncResult 将允许它。
至于调试,异常发生在Invoke上,因为你在给定的线程A上调试,异常发生在线程B上。你可以在多个线程上断点。在线程 B 代码上设置断点,您将看到异常接近源或位于源上。
请注意,如果多个线程同时运行代码,您的调试器将会跳转。在多线程中进行调试总是至少有点棘手,但是当您解决问题时会感到满意。
您还可以进一步改进您的答案代码,在检查 InvokeRequired 之前检查 null,因为这与您的逻辑无关(您的代码在使用之前、调用之后检查它)。这将节省将 Invoke 推送到消息泵上的时间(假设为 WinForms)。