小编Zen*_*ker的帖子

将JPEG图像转换为字节数组 - COM异常

使用C#,我正在尝试从磁盘加载JPEG文件并将其转换为字节数组.到目前为止,我有这个代码:

static void Main(string[] args)
{
    System.Windows.Media.Imaging.BitmapFrame bitmapFrame;

    using (var fs = new System.IO.FileStream(@"C:\Lenna.jpg", FileMode.Open))
    {
        bitmapFrame = BitmapFrame.Create(fs);
    }

    System.Windows.Media.Imaging.BitmapEncoder encoder = 
        new System.Windows.Media.Imaging.JpegBitmapEncoder();
    encoder.Frames.Add(bitmapFrame);

    byte[] myBytes;
    using (var memoryStream = new System.IO.MemoryStream())
    {
        encoder.Save(memoryStream); // Line ARGH

        // mission accomplished if myBytes is populated
        myBytes = memoryStream.ToArray(); 
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,执行行ARGH给了我一条消息:

COMException未处理.句柄无效.(HRESULT异常:0x80070006(E_HANDLE))

我不认为这个文件有什么特别之处Lenna.jpg- 我是从http://computervision.wikia.com/wiki/File:Lenna.jpg下载的.你能说出上面的代码有什么问题吗?

c# com wpf file-io image

21
推荐指数
3
解决办法
6万
查看次数

带事件通知的任务 - .net 4

昨天在SO上,我看到一个线程要求代码,其中一些是这样做的.我的意思是,您(经理线程)使用TPL API启动任务数量,一旦完成作业,该线程应通知您(经理)回复谁维护任务池.

所以这是我试过的代码.虽然我必须说它的工作原理如上所述.

class TaskJob
{
    public delegate void NotificationDelegate(int? taskId,string message);
    public event NotificationDelegate NotifyCompletion;

    public void TaskToRun()
    {
        try
        {
            if (Task.CurrentId == 4)//If its a 4th thread, simulate exception
                throw new Exception();

            Console.WriteLine("Task started with thread id " + Task.CurrentId);
            Thread.Sleep(100000);

            Console.WriteLine("Task finished with thread id " + Task.CurrentId);

            NotifyCompletion(Task.CurrentId, "Successfully completed");
        }
        catch
        {
            NotifyCompletion(Task.CurrentId, "Faulted error");
        }
    }        
}

class Program
{
    static List<Task> taskList = new List<Task>();
    public static void Main()
    {
        for (int …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading task-parallel-library

5
推荐指数
1
解决办法
2万
查看次数

为什么没有具有相同基类和派生类名的循环继承

在SO的其他线程上,今天我发现了这个小代码片段,我填写了更多内容以使其完整,

class GameObject
{
    public virtual void Hello()
    {

        Console.WriteLine("Hello method in base class");
    }
}

class GameObj?ct : GameObject 
{
    public override void Hello()
    {
        Console.WriteLine("Hello method in derived class");

    }

}

class Program
{

    public static void Main(string[] args)
    {
        GameObject obj = new GameObject();//Why i never can call Derived? Though c# allows it?
        obj.Hello();


        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在按照上面的代码,CSC不会发出任何警告.但代码令人惊讶.

我使用ILDasm打开了IL代码,它显示派生类,即GameObject为'GameObject'名称,基类名称为''.

所以我的问题是

  1. 即使在运行时,编译器如何区分这两个类名?

  2. 如果粘贴在带有ANSI编码的记事本上,我们会根据我的朋友Abhishek sur获得一个奇怪的字符.http://twitpic.com/68co6z

谢谢

编辑:使用不同的名称更新相同的代码,我从编译器收到错误.

class XXXYYY
    {
        public virtual void Hello()
        {

            Console.WriteLine("Hello …
Run Code Online (Sandbox Code Playgroud)

c# inheritance

3
推荐指数
1
解决办法
1066
查看次数