From what I can gather from your question, there might be an issue with your conversion of your image to gray scale.
The error code below refers the the depth type of your image, i.e, how many color values can fit inside each individual pixel of your image. In your case, with gray scale images, since you only hold values from black to white with different variants of gray in between, the depth type of the image will be smaller.
_src.depth()==CV_8U
If you just want to pass an image to the Canny function, then you must convert it to gray scale first.
// Read in the image from a file path
Mat img = CvInvoke.Imread(filePath, ImreadModes.AnyColor);
// Convert the image to gray scale
Image<Gray, byte> gray = img.ToImage<Gray, byte>();
// Threshold the image
CvInvoke.Threshold(gray, gray, 0, 100, ThresholdType.Binary);
// Canny the thresholded image
gray = gray.Canny(50, 200);
If you just want to pass an image to the Canny function without passing it through a threshold, then you can use the code below.
// Read in the image from a file path
Mat img = CvInvoke.Imread(filePath, ImreadModes.AnyColor);
// Convert the image to gray scale
Image<Gray, byte> gray = img.ToImage<Gray, byte>();
// Canny the thresholded image
gray = gray.Canny(50, 200);