GetParameters(MetadataReader reader, TypeReferenceTypeProvider typeProvider, GenericContext genericContext, MethodSignature <MetadataTypeReference> signature, ParameterHandleCollection handles)
        {
            var parameters            = new IMetadataParameter[handles.Count];
            var returnValueAttributes = (IReadOnlyList <IMetadataAttribute>)null;

            var maxSequenceNumber = 0;

            foreach (var handle in handles)
            {
                var parameter = reader.GetParameter(handle);
                if (parameter.SequenceNumber == 0)
                {
                    returnValueAttributes = GetAttributes(reader, typeProvider, parameter.GetCustomAttributes(), genericContext);
                    continue;
                }
                if (maxSequenceNumber < parameter.SequenceNumber)
                {
                    maxSequenceNumber = parameter.SequenceNumber;
                }
                var parameterIndex = parameter.SequenceNumber - 1;
                parameters[parameterIndex] = new ReaderParameter(reader, typeProvider, parameter, genericContext, signature.ParameterTypes[parameterIndex]);
            }

            if (maxSequenceNumber == parameters.Length)
            {
                return(parameters, Array.Empty <IMetadataAttribute>());
            }

            // Account for skipping the return parameter
            var correctedLength = new IMetadataParameter[maxSequenceNumber];

            Array.Copy(parameters, correctedLength, correctedLength.Length);
            return(correctedLength, returnValueAttributes);
        }
Esempio n. 2
0
        public void ProcessRequest(HttpContext context)
        {
            if (string.IsNullOrEmpty(noimagePath))
            {
                noimagePath = context.Server.MapPath("~\\images\\noimage.png");
            }
            int imageID = -1;
            int.TryParse((context.Request.Params["id"] ?? "-1").ToString(), out imageID);
            bool isThumbnail = bool.Parse((context.Request.Params["thumbnail"] ?? "false").ToString());

            ReaderParameter par = new ReaderParameter();

            par.ImageId = imageID;
            par.IsThumbnail = isThumbnail;
            par.IsNoImagePath = noimagePath;
            par.DataSource = bll;
            par.IsThumbnail = isThumbnail;

            Thread thread = new Thread(picreader);

            thread.Start(par);
            //如果超过500毫秒未读取出来就直接停止
            Thread.Sleep(500);

            if (!par.Success ||(thread.ThreadState != ThreadState.Stopped && thread.ThreadState != ThreadState.StopRequested ))
            {
                thread.Abort();
                FileStream fstr = null;
                try
                {
                    fstr = File.OpenRead(par.IsNoImagePath);
                    par.CathedImage = System.Drawing.Image.FromStream(fstr, true);
                }
                catch
                {
                    throw;
                }
                finally
                {
                    fstr.Close();
                }
            }
            System.Drawing.Imaging.ImageFormat format = System.Drawing.Imaging.ImageFormat.Jpeg;
            par.CathedImage.Save(context.Response.OutputStream, format);
        }