久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

調用線程無法訪問此對象,因為不同的線程擁有

The calling thread cannot access this object because a different thread owns it(調用線程無法訪問此對象,因為不同的線程擁有它)
本文介紹了調用線程無法訪問此對象,因為不同的線程擁有它的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

為什么我不能在下面的代碼中創建 CroppedBitmap?我遇到了一個例外:

Why I can't create CroppedBitmap in the following code? I got an exception:

調用線程無法訪問此對象,因為另一個線程擁有它.

The calling thread cannot access this object because a different thread owns it.

如果我將代碼更改為

CroppedBitmap cb = new CroppedBitmap(new WriteableBitmap(bf), new Int32Rect(1, 1, 5, 5));

異常消失了嗎?為什么?

the exception is gone? why ?

代碼 1,cb.Freeze() 處的異常:

Code 1, an exception at cb.Freeze():

public MainWindow()
{
    InitializeComponent();

    ThreadPool.QueueUserWorkItem((o) =>
        {
            //load a large image file
            var bf = BitmapFrame.Create(
                new Uri("D:\1172735642.jpg"),
                BitmapCreateOptions.None,
                BitmapCacheOption.None);
            bf.Freeze();
            Dispatcher.BeginInvoke(
                new Action(() =>
                    {
                        CroppedBitmap cb = new CroppedBitmap(bf, new Int32Rect(1,1,5,5));
                        cb.Freeze();
                        //set Image's source to cb....
                    }), 
                    DispatcherPriority.ApplicationIdle);
         }
    );
}

代碼 2,有效:

    ThreadPool.QueueUserWorkItem((o) =>
    {
        var bf = BitmapFrame.Create(
                new Uri("D:\1172740755.jpg"),
                BitmapCreateOptions.None,
                //BitmapCreateOptions.DelayCreation,
                BitmapCacheOption.None);
        bf.Freeze();
        var wb = new WriteableBitmap(bf);
        wb.Freeze();
        this.Dispatcher.Invoke(
            new Action(() =>
            {
                var r = new Int32Rect(1, 1, 5, 5);
                CroppedBitmap cb = new CroppedBitmap(wb, r);
                cb.Freeze();
                //set Image's source to cb....
                Image.Source = cb;
            }),
            DispatcherPriority.ApplicationIdle);
    }
);

代碼 3,無需 WritableBitmap 即可工作:

Code 3, works without WritableBitmap:

ThreadPool.QueueUserWorkItem((o) =>
    {
        var bf = BitmapFrame.Create(
                new Uri("D:\1172735642.jpg"),
                BitmapCreateOptions.None,
                //BitmapCreateOptions.DelayCreation,
                BitmapCacheOption.None);
        bf.Freeze();
        var bf2 = BitmapFrame.Create(bf);
        bf2.Freeze();

        this.Dispatcher.Invoke(
            new Action(() =>
            {
                var r = new Int32Rect(1, 1, 5, 5);
                BitmapSource cb = new CroppedBitmap(bf2, r);
                cb.Freeze();
                //set Image's source to cb....
                Image.Source = cb;
            }),
            DispatcherPriority.ApplicationIdle);
    }
);

推薦答案

您可以在反射器中查看這些類.cb.Freeze() 中會出現異常.在

You can look through this classes in reflector. Exception will rise in cb.Freeze(). In

CroppedBitmap cb = new CroppedBitmap(bf, new Int32Rect(1,1,5,5));

case 構造函數做了這樣的事情:

case constructor did something like this:

this.this.Source = source;

所以源不是在當前線程中創建的,所以會出現異常.在

So source wasn't created in current thread, and so exception will rise. In

new WriteableBitmap(bf)

案例,構造函數與 bf 對象同步,并且在當前線程中創建了新源,因此不會出現異常.如果您對 In Depth 細節感興趣,您可以隨時使用 Reflector 反射基礎庫 :)

case, constructor synchronize with bf object and new source is created in current thread, so, no exceptions will rise. If you are interested in In Depth details, you can always reflect base libraries with Reflector :)

這篇關于調用線程無法訪問此對象,因為不同的線程擁有它的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Is there a way to know if someone has bookmarked your website?(有沒有辦法知道是否有人為您的網站添加了書簽?)
Use of Different .Net Languages?(使用不同的 .Net 語言?)
Is there a C# library that will perform the Excel NORMINV function?(是否有執行 Excel NORMINV 函數的 C# 庫?)
Determining an #39;active#39; user count of an ASP.NET site(確定 ASP.NET 站點的“活動用戶數)
Select x random elements from a weighted list in C# (without replacement)(從 C# 中的加權列表中選擇 x 個隨機元素(無需替換))
Best way to keep track of current online users(跟蹤當前在線用戶的最佳方式)
主站蜘蛛池模板: 国产成人精品一区二区三区四区 | 国产精品精品视频一区二区三区 | wwwxx在线观看| 精品久久国产 | 911网站大全在线观看 | 中文字幕在线第二页 | 国产精品久久久久久久久免费相片 | 亚洲有码转帖 | 天天综合网天天综合 | 欧美黄色性生活视频 | 亚洲免费在线观看视频 | 日本aaaa| 日本视频中文字幕 | 性欧美精品一区二区三区在线播放 | 久久www免费视频 | 亚洲狠狠 | 日韩免费一区二区 | 免费艹逼视频 | www.操com| 亚洲美女一区二区三区 | 免费欧美 | 成人av观看| 91欧美精品成人综合在线观看 | 亚洲一区国产精品 | 国外成人在线视频网站 | 久久精品手机视频 | 欧美日韩一区二区三区在线观看 | 国产在线观看一区二区三区 | 成人精品久久 | 永久免费av | 在线资源视频 | 成年免费大片黄在线观看岛国 | 涩爱av一区二区三区 | 国产亚洲精品久久久久动 | 人人玩人人添人人澡欧美 | 久久久久久久久久久久久91 | 黄网站涩免费蜜桃网站 | 天天操一操 | 中文字幕乱码一区二区三区 | 国产精品视频一区二区三区不卡 | 中日韩av |