Makale numarası: 839076 - Son Gözden Geçirme: 28 Ekim 2005 Cuma - Gözden geçirme: 3.1 Windows Forms uygulamalarında COM istemci kullandığınızda beklenmeyen davranışlarla karşılaşabilirsiniz
Bu SayfadaÖzetMicrosoft Visual Basic 6.0 uygulaması gibi bir COM istemci uygulaması veya bir Microsoft Foundation Classes (MFC) uygulaması Microsoft Windows Form örneği açtığınızda, Windows .NET formu beklenmedik biçimde davranabilir. Örneğin, SEKME tuşuna bastığınızda, odağın bir denetimden başka bir denetime değiştirmez. Veya, bir komut düğmesi odaklanmışken ENTER tuşuna bastığınızda, düğme olayı tıklatın değil ateşlenmesine. Ayrıca, tuş vuruşları veya fare aktivite, beklenmeyen davranışlarla karşılaşabilirsiniz. Eski uygulama, .NET Framework Windows Form'u düzgün çalışması için gereken ileti döngüsü desteği uygulamadığından Bu belirtiler ortaya çıkar. Bu makalede, .NET Framework bir ileti döngüsü Application.Run yöntemini kullanarak oluşturduğunuz formun görüntüleyerek, bu sorunları gidermek açıklamaktadır. BelirtilerBir COM istemci uygulamasından bir Microsoft Windows Form'u örneğini oluşturduğunuzda, formdaki beklenmedik biçimde davranabilir. Bir Microsoft Visual Basic 6.0 uygulaması veya bir Microsoft Foundation Classes (MFC) uygulaması formu örneğini oluşturduğunuzda, SEKME tuşuna bastığınızda, odağın bir denetimden başka bir denetime değiştirmez. Veya, bir komut düğmesi odaklanmışken ENTER tuşuna basarsanız, düğme olayı tıklatın değil ateşlenmesine. Ayrıca, tuş vuruşları veya fare aktivite, beklenmeyen davranışlarla karşılaşabilirsiniz. NedenBu sorun, Windows formu kullanan ileti döngüsü ve COM istemci uygulaması sağlayan bir ileti döngüsü farklı olduğu için oluşur. Microsoft bu sorunu gidermek için tasarım yaptınız. Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın: 885446
(http://support.microsoft.com/kb/885446/
)
Düzeltme:, SEKME veya ENTER bir Windows formu .NET Framework 1.1 SP1 çalıştıran bir bilgisayarda tuşuna bastığınızda, beklenmeyen davranışlarla karşılaşabilirsiniz. Bu makalede, .NET Framework bir ileti döngüsü Application.Run yöntemini kullanarak oluşturduğunuz formun görüntüleyerek, bu sorunu gidermek açıklamaktadır.ÇözümBir .NET Framework ileti döngüsünü başlatmak için aşağıdaki yöntemlerden birini kullanın:
Windows formu görüntülemek için ShowDialog yöntemi kullanın.Bu, form üzerinde .NET Framework bir ileti döngüsü görüntülemek için kolay çözümüdür. Bunu yapmak için <a0></a0>, .NET Framework bileşeniniz ShowDialog yönteminde çağrıları Göster yöntem çağrıları değiştirin.ShowDialog yöntemi, önceki uygulamanın ileti döngüsü askıya alır ve form gibi bir iletişim kutusu görüntüler. ShowDialog yöntemi, ana uygulamanın ileti döngüsü askıya alınmış olduğundan, formun iletileri işlemek için yeni bir .NET Framework ileti döngüsü oluşturur. Bunu uygulamak için en az bir kod gerektiren kolay çözüm olmasıdır. Ancak, bu yaklaşımın olumsuz yanı, form modally açılır kullanılır. Bu davranış Windows Form açıkken, çağıran uygulama içinde herhangi bir kullanıcı arabirimi (UI) engeller. Kullanıcı Windows formu kapattığında çalışan Özgeçmiş döngüsü, ileti döngüsü sonlandırılıyor .NET Framework ve daha önceki bir uygulamanın ileti. Her Windows Form yeni bir iş parçacığı üzerinde görüntülemeKendi ileti döngüsü kullanarak, kendi iş parçacığında bir formun her örneği görüntülemek için .NET Framework bileşeni değiştirin. Iş parçacığı çalıştıran birden çok ileti döngüsü bulunamaz. Bu nedenle, istemci uygulamanın ileti döngüsü değiştiremezsiniz. Ancak, .NET Framework bileşen için kendi ileti döngüsü kullanan yeni bir iş parçacığı başlatılamıyor değiştirebilirsiniz.Not Çok iş parçacıklı programlama uygulama önce dikkatli dikkate gerektiren gelişmiş bir kavram olduğunu. Birden çok iş parçacığı, paylaşılan bir kaynağa erişmesi gereken, bu özellikle geçerlidir. Paylaşılan kaynağa aynı anda birden çok iş parçacığı erişmesi gereken iş parçacığı güvenlik için .NET Framework bileşenleri tasarım emin olun.Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın: 316136
(http://support.microsoft.com/kb/316136/
)
Birden çok iş parçacığı oluşturma bir ortamda paylaşılan bir kaynağa erişim Visual Basic .NET ile eşitleme Yeni bir iş parçacığında bir <a0>Windows</a0> formun her örneği oluşturmak için aşağıdaki adımları izleyin:
.NET Framework bileşeni yeni bir iş parçacığı üzerinde paylaşılan bir iletinin bir döngü oluşturun.Bu yöntem, bir "Her bir Windows formu, yeni bir iş parçacığı Göster" bölümünde benzer. Ancak, her form kendi iş parçacığında kendi ileti döngüsü kullanarak görüntülemek yerine, bu yöntem, .NET Framework bileşeni yeni yalnızca bir iş parçacığı üzerinde çalışan bir paylaşılan ileti döngü oluşturuyor.Bu yöntem, standart bir Windows Forms uygulaması çalıştırıyor olması gerekir, davranışı daha doğru bir şekilde temsil eder. Bu tasarımı ayrıca tüm formların üzerinde aynı iş parçacığının çalıştığı için birden fazla form arasında kaynakları paylaşmak kolaylaştırır. "Her bir Windows formu, yeni bir iş parçacığı Göster" bölümündeki çözüm, her form için yeni bir iş parçacığı oluşturur. Bu çözüm, farklı bir formlar arasında kaynak paylaştırma ek iş parçacığı eşitleme kod gerektirir. Bu yöntem diğer yöntemlerden daha fazla benzer davranışı için Windows Forms uygulaması olduğundan, .NET Framework ileti döngüsü durduğunda istemci uygulamasını açar, tüm .NET Framework formları kapanacak dikkat edin. Kullanıcı için ApplicationContext ana form olarak belirlenmiş formu kapattığında Bu davranış oluşur. ApplicationContext ileti döngüsünü başlatmak için kullanılır. Aşağıdaki kod örneği, ApplicationContext, ana form bir istemci uygulamasını açar ilk form için ayarlanır. Bu nedenle, bu form örneği, .NET Framework ileti döngüsü çıkar ve tüm diğer Windows Forms kullanıcı kapatır kapanacak. Paylaşılan ileti döngüsü kullanmak tüm formlar için yeni bir iş parçacığı oluşturmak için <a0></a0>, aşağıdaki adımları izleyin:
DurumBu davranış tasarım yüzündendir. Daha fazla bilgiBir iç programı döngüsündeki gibi bir iş parçacığının ileti sırasından iletileri alan döngü uygulama iletisi, bunları çevirir ve daha sonra işlenmek üzere uygulamaya gönderir. Windows bir form için ileti döngüsü önceki uygulamaları, Visual Basic 6.0 uygulamalarını ve MFC uygulamaları, ileti döngüleri gibi aynı mimarisine sahip değil. Windows formu umuyor çok ileti döngüsü için deftere nakledilen pencere iletilerinin farklı şekilde işlenebilir. Bu nedenle, beklenmeyen bir davranış ortaya çıkabilir. Bazı tuş vuruşu bileşimlerini çalışmayabilir, bazı fare aktivite çalışmayabilir veya bazı olayları beklendiği gibi ateşlenmesine değil. Not Yalnızca desteklenen mimarisi görüntüleme ve bir Windows formu kullanarak BIR .NET Framework ileti döngüsü var. "Çözüm" bölümünde açıklanan çözüm, yalnızca bir Windows formu görüntülemek için geçerlidir. COM çağrılabilir sarmalayıcı (saatin tersi YÖNDE) boyunca bir .NET Framework denetimini barındıran için desteklenen tek kapsayıcısı, Microsoft ınternet Explorer ' dir. Bu denetim, Denetim bir kapsayıcıda olması gerektiğinden, kapsayıcıyı sağlayan bir ileti döngüsü kullanmanız gerekir. Bu nedenle, .NET Framework denetim için "Çözüm" bölümünde açıklanan çözüm kullanamazsınız. Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın: 311334
(http://support.microsoft.com/kb/311334/
)
.NET denetimlerini destekleyen bir ActiveX denetimi kapsayıcılar 317346
(http://support.microsoft.com/kb/317346/
)
Internet Explorer'da yerel COM çağrılabilir .NET karşı denetler Davranışı Yeniden Oluşturma Adımları
ReferanslarDaha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın: 316422
(http://support.microsoft.com/kb/316422/
)
Visual Basic. NET'te iş parçacığı için yol haritası 315577
(http://support.microsoft.com/kb/315577/
)
Visual Basic. NET'te iş parçacığı oluşturma hakkında Bu makaledeki bilginin uygulandığı durum:
Otomatik TercümeÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir. Makalenin İngilizcesi aşağıdaki gibidir:839076
(http://support.microsoft.com/kb/839076/en-us/
)
| Diğer Kaynaklar Diğer Destek Siteleri
ToplulukHemen Yardım AlMakale çevirileri |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Üste