﻿
{"id":5519,"date":"2017-01-10T07:58:13","date_gmt":"2017-01-10T07:58:13","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=5519"},"modified":"2017-01-10T07:58:13","modified_gmt":"2017-01-10T07:58:13","slug":"wpfte-the-calling-thread-cannot-access-this-object-because-a-different-thread-owns-it-hatasi-ve-cozumu","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/wpfte-the-calling-thread-cannot-access-this-object-because-a-different-thread-owns-it-hatasi-ve-cozumu\/","title":{"rendered":"WPF&#8217;te &#8220;The Calling Thread Cannot Access This Object Because A Different Thread Owns It&#8221; Hatas\u0131 ve \u00c7\u00f6z\u00fcm\u00fc"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<br \/>\nHat\u0131rlarsan\u0131z e\u011fer C# Winfows Forms uygulamalar\u0131na \u00f6zel olarak <a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-bir-is-parcacigini-farkli-bir-is-parcaciginda-denetlemek\/\" target=\"_blank\">C#\u2019ta Bir \u0130\u015f Par\u00e7ac\u0131\u011f\u0131n\u0131 Farkl\u0131 Bir \u0130\u015f Par\u00e7ac\u0131\u011f\u0131nda Denetlemek<\/a> ba\u015fl\u0131kl\u0131 makalemde birbirine m\u00fcdahale eden Threadlar\u0131n birbirlerine m\u00fcdahale etmesi sonucu al\u0131nan hatay\u0131 irdelemi\u015ftik. Makaleyi detayland\u0131rd\u0131\u011f\u0131n\u0131zda anlayaca\u011f\u0131n\u0131z bir i\u015f par\u00e7ac\u0131\u011f\u0131 i\u00e7erisindeki i\u015flevi farkl\u0131 bir i\u015f par\u00e7ac\u0131\u011f\u0131 i\u00e7erisinde devreye sokuyorsak i\u00e7erikteki ilgili hatayla kar\u015f\u0131la\u015fmaktay\u0131z.<\/p>\n<p>\u0130\u015fte buradaki olas\u0131 hata durumunun bir benzerini WPF uygulamalar\u0131nda almaktay\u0131z. Birazdan yapaca\u011f\u0131m\u0131z \u00f6rneklendirmede farkl\u0131 i\u015f par\u00e7ac\u0131klar\u0131n\u0131n birbirlerine m\u00fcdahale etmesi durumunda al\u0131nacak hata, yukar\u0131da vermi\u015f oldu\u011fum benzer i\u00e7eri\u011fe sahip adresteki hatayla farkl\u0131 y\u00f6ntem lakin ayn\u0131 mant\u0131k \u00e7er\u00e7evesinde \u00e7\u00f6z\u00fcme kavu\u015fturulmaktad\u0131r.<\/p>\n<p>\u00d6ncelikle ald\u0131\u011f\u0131m\u0131z hatadan bahsederek ba\u015flayal\u0131m. Hatam\u0131z\u0131n metinsel halini a\u015fa\u011f\u0131da sunuyorum&#8230;<\/p>\n<blockquote>\n<p style=\"text-align: center;\"><span style=\"color: #ff0000;\"><em><strong>&#8220;System.InvalidOperationException: &#8216;The calling thread cannot access this object because a different thread owns it.'&#8221;<\/strong><\/em><\/span><\/p>\n<\/blockquote>\n<p>Hatam\u0131z\u0131n ekran g\u00f6r\u00fcnt\u00fcs\u00fcde a\u015fa\u011f\u0131daki gibidir,<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/01\/C-WPFte-The-Calling-Thread-Cannot-Access-This-Object-Because-A-Different-Thread-Owns-It-Hatas\u0131-ve-\u00c7\u00f6z\u00fcm\u00fc.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/01\/C-WPFte-The-Calling-Thread-Cannot-Access-This-Object-Because-A-Different-Thread-Owns-It-Hatas\u0131-ve-\u00c7\u00f6z\u00fcm\u00fc.png\" alt=\"WPF\u2019te \u201cThe Calling Thread Cannot Access This Object Because A Different Thread Owns It\u201d Hatas\u0131 ve \u00c7\u00f6z\u00fcm\u00fc\" width=\"396\" height=\"125\" class=\"aligncenter size-full wp-image-5526\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/01\/C-WPFte-The-Calling-Thread-Cannot-Access-This-Object-Because-A-Different-Thread-Owns-It-Hatas\u0131-ve-\u00c7\u00f6z\u00fcm\u00fc.png 396w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/01\/C-WPFte-The-Calling-Thread-Cannot-Access-This-Object-Because-A-Different-Thread-Owns-It-Hatas\u0131-ve-\u00c7\u00f6z\u00fcm\u00fc-300x95.png 300w\" sizes=\"auto, (max-width: 396px) 100vw, 396px\" \/><\/a><br \/>\nBu hatan\u0131n T\u00fcrk\u00e7e meali; <em>&#8220;Ba\u015fka bir i\u015f par\u00e7ac\u0131\u011f\u0131na ait oldu\u011fundan \u00e7a\u011f\u0131ran i\u015f par\u00e7ac\u0131\u011f\u0131 bu nesneye eri\u015femiyor.&#8221;<\/em> olacakt\u0131r. Yani anlayaca\u011f\u0131n\u0131z farkl\u0131 Threadlar birbirlerine m\u00fcdahale etmekte ve birine ait olan bir i\u015flem ba\u015fka birisi taraf\u0131ndan \u00e7a\u011fr\u0131lmaya\/kullan\u0131lmaya\/eri\u015filmeye\/\u00e7al\u0131\u015ft\u0131r\u0131lmaya \u00e7al\u0131\u015f\u0131l\u0131yor.<\/p>\n<h3>Peki bu hatay\u0131 ne gibi durumlarda al\u0131yoruz?<\/h3>\n<p>Hemen \u00f6rneklendirelim&#8230;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        async void Say()\r\n        {\r\n            await Task.Run(() =&gt;\r\n            {\r\n                int Sayac = 0;\r\n                while (true)\r\n                        lblSayac.Content = Sayac++;\r\n            });\r\n        }\r\n\r\n        private void btnBaslat_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            Say();\r\n        }\r\n<\/pre>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere Say metodu asenkron \u00e7al\u0131\u015fmakta ve Name de\u011feri &#8220;lblSayac&#8221; olan bir Label nesnesine m\u00fcdahale etmektedir. Haliyle Say isimli Thread, i\u00e7erisinde farkl\u0131 bir Thread&#8217;a ait olan Label nesnesine eri\u015fmeye \u00e7al\u0131\u015fmaktad\u0131r. \u0130\u015fte bu durumdan dolay\u0131 yukar\u0131daki olas\u0131 hatayla kar\u015f\u0131la\u015f\u0131lmaktad\u0131r.<\/p>\n<h3>Hadi bu hatay\u0131 \u00e7\u00f6zelim&#8230;<\/h3>\n<p>Yapmam\u0131z gereken aynen Windows Forms&#8217;larda oldu\u011fu gibi farkl\u0131 Thread&#8217;da ki bir i\u015flemi \u00e7a\u011f\u0131rman\u0131n\/kullanman\u0131n\/eri\u015fmenin\/\u00e7al\u0131\u015ft\u0131rman\u0131n yolu ilgili i\u015flemi o nesne \u00fczerinde a\u015fa\u011f\u0131daki gibi Invoke etmektir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        async void Say()\r\n        {\r\n            await Task.Run(() =&gt;\r\n            {\r\n                int Sayac = 0;\r\n                while (true)\r\n                    lblSayac.Dispatcher.Invoke(() =&gt;\r\n                    {\r\n                        lblSayac.Content = Sayac++;\r\n                    });\r\n            });\r\n        }\r\n<\/pre>\n<p>Dikkat ederseniz WPF&#8217;te Control nesnelerinin &#8220;Dispatcher&#8221; t\u00fcr\u00fcnden propertysi mevcuttur. Bu tip, s\u0131radaki i\u015flemlere ge\u00e7ilece\u011fi durumlarda ge\u00e7me i\u015flemini sa\u011flamaktad\u0131r. O y\u00fczden de &#8216;sevk eden&#8217; mahiyetinde bir anlam\u0131 vard\u0131r. \u0130\u015fte bu tipteki property arac\u0131l\u0131\u011f\u0131yla farkl\u0131 kanaldaki bir i\u015flev Invoke edilmekte ve konumuz olan ilgili hata ortadan kald\u0131r\u0131lmaktad\u0131r.<\/p>\n<p>Konumuzu sonland\u0131rmadan \u00f6nce Dispatcher s\u0131n\u0131f\u0131yla farkl\u0131 bir yakla\u015f\u0131m sergileyerek ilgili olas\u0131 hatam\u0131za bir ba\u015fka \u00e7\u00f6z\u00fcm daha sunal\u0131m&#8230;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        async void Say()\r\n        {\r\n            await Task.Run(() =&gt;\r\n            {\r\n                int Sayac = 0;\r\n                while (true)\r\n                    Dispatcher.Invoke(() =&gt; {\r\n                        lblSayac.Content = Sayac++;\r\n                    });\r\n            });\r\n        }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi kodumuz zahiren \u00e7ok fazla de\u011fi\u015fkenlik g\u00f6stermemi\u015ftir. Lakin Thread&#8217;lar da ki bu hata durumunu ar\u0131nd\u0131rmak i\u00e7in ilgili Control nesnesinin Dispatcher propertysini \u00e7a\u011f\u0131rabildi\u011fimiz gibi, direkt olarak Dispatcher s\u0131n\u0131f\u0131n\u0131n static Invoke metoduylada i\u015flemimizi ger\u00e7ekle\u015ftirebiliriz.<\/p>\n<p>Evet&#8230; Bir makalemizin daha sonuna gelmi\u015f bulunmaktay\u0131z.<br \/>\nUmar\u0131m bol bol faydalan\u0131r, bu olas\u0131 hatalardan projelerinizi ar\u0131nd\u0131r\u0131rs\u0131n\u0131z.<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar dilerim&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Hat\u0131rlarsan\u0131z e\u011fer C# Winfows Forms uygulamalar\u0131na \u00f6zel olarak C#\u2019ta Bir \u0130\u015f Par\u00e7ac\u0131\u011f\u0131n\u0131 Farkl\u0131 Bir \u0130\u015f Par\u00e7ac\u0131\u011f\u0131nda Denetlemek ba\u015fl\u0131kl\u0131 makalemde birbirine m\u00fcdahale eden Threadlar\u0131n birbirlerine m\u00fcdahale etmesi sonucu al\u0131nan hatay\u0131 irdelemi\u015ftik. Makaleyi detayland\u0131rd\u0131\u011f\u0131n\u0131zda anlayaca\u011f\u0131n\u0131z&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":3223,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,1588],"tags":[579,1233,1234,1590,260,849,1083,1589],"class_list":["post-5519","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-sharp-c","category-wpf","tag-asenkron","tag-async","tag-await","tag-dispatcher","tag-hata","tag-hata-cozumleri","tag-hata-ve-cozumu","tag-wpf"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5519","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=5519"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5519\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3223"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=5519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=5519"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=5519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}