2010-03-12 13 views
6

.Net Compact Framework'te bir mobil uygulama geliştiriyorum. Kayıt defterini HKEY_CLASSES_ROOT olarak değiştirmeyi başardım, böylece .xyz uzantılı bir dosyaya tıklamama başvurumu açacak. Temel olarak, tıklandığında bu dosyada biraz işlem yapmam gerekiyor. Bununla birlikte, ilk defa bunu yaparsam, static void Main numaralı telefondan program.cs'ye ulaştığını anlıyorum. Ancak program çalışırken ve .xyz uzantılı dosyayı tekrar tıklıyorum, static void Main programını yüklemiyor. Şu anda çalışmakta olan formda kesme noktaları belirlemeye çalıştım ama hala hiçbir şey.C# CF: Programımla belirli bir dosya uzantısı nasıl açılır

Peki nereye gidiyor? Nasıl dosyayı tespit edebilirim .xyz tıklanır ve bir şeyler yapar?

cevap

0

Ana dize dizeleriniz var mı?

static void Main(string[] args) 
+0

Merhaba, Dönüştürerek komut satırı bağımsız değişkenine izin ver: 'statik boşluk Ana() { Application.Run (yeni Main()); } 'Bu ' void Ana (String [] args) için { halinde (args.Length = 0) MessageBox.Show ("Dizi len = 0"); else MessageBox.Show ("Array len = 0"); Application.Run (yeni Main()); } , ancak program çalışırken ve bir .xyz dosya uzantısını açtığımda, ana kaynağına hiç ulaşmadı. – nuttynibbles

+0

Hmm, evet bu zor olabilir. Çalışıyorsa dosyaları sürükleyip bırakabilir misiniz (http://stackoverflow.com/questions/68598/how-do-i-drag-and-drop-files-into-c). Muhtemelen tercih edilmediğini biliyorum. – SwDevMan81

+0

Program çalışmıyorken ve ilk başlatıldığında Main (String [] args) öğesine ulaşır. Programım form ve tümünü ile çalışırken ve dosyayı tıklattığımda, o sırada çalışan formumu açar (örneğin, form ayarı). Bu doğru bir yaklaşım olup olmadığından emin değilim. Ana programımı kullanmak için bu işlemi kullanmak. temelde ana programım tüm GUI ve diğer özelliklere sahip. – nuttynibbles

0

Senin sorunun static void Main aradığınız bir Static Constructor olan tekrar çağrılacak olmasıdır. Statik kurucular sadece bir kez çağrılır. Dersten önce çağrılırlar (bu durumda programınız) başlatılır, bir daha asla. Programınızın her yeni örneği için çağrılmıyorlar.

+0

Uygulama zaten çalışıyor olduğundan, bu çağrı almayacak. – ctacke

+0

İyi nokta. Bir sınıfa aynı şekilde davranılacağını düşündüm. –

2

Uygulamanızın en büyük problemi, uygulama bir kez çalıştırıldığında, Ana'nın bir daha asla çağrılmayacağı ve aslında bunun olmaması gerektiği.

Windows Mobile altında, maalesef, CF'nin kendisi de uygulamaları tekil olarak tutmaya çalışır, bu yüzden uygulamayı ikinci kez çalıştırmaya çalıştığınızda, CLR'nin kendisi bunu durdurur ve bunun yerine varolan örneği ön plana getirir. Bunun talihsiz yan etkilerinden biri, komut satırı parametrelerini ele alma fırsatınız olmamasıdır.

bu işe almak için, bir kaç şey yapmak zorunda:

  1. Subvert the CF's attempt to make your app a sinlgeton böylece can çalıştırmak birden çok örneği.
  2. Zaten çalışıyor olup olmadığını öğrenmek için app bir muteks tutun.
  3. Sonraki örneklerden gelen parametreleri dinlemek için bir iş parçacığı erken doğrayın. Parametreler geldiğinde, kendinizi ön plana getirin ve parametreleri uygun şekilde ele alın.
  4. Başlangıçta, eğer muteks zaten alınmışsa (yani uygulama zaten çalışıyorsa), mevcut uygulamanızın dinleyici dizisini (bkz. # 3) parametrelerinizi göndermek için IPC'yi (bir noktadan noktaya kuyruğu iyi bir yol) kullanın. ve sonra bırak.
+0

# 1 harika bir hile ve aynı zamanda kaputun altında neler olup bittiğine dair harika bir açıklama. İş arkadaşlarımın, bir uygulamanın beklenen davranışını değiştiren herhangi bir şey için düşkünlükleri göz önüne alındığında, bu makaleyi asla okumamasına çok sevindim. :) – MusiGenesis

1

Tıkladığınız her dosyada bir işlem yapmanız gerektiğini söylüyorsunuz. Bunun, çift tıklandığında dosyanın özelliklerini göstermek istediğiniz gibi, GUI ile ilgili bir şey olduğunu varsayarak düşünüyorum. Programınızı varsayarsak

Eğer false onun MinimizeBox özelliğini ayarlayın ve Deactivate olay this.Close(); koyabilirsiniz, bir ana forma sahiptir. Bu şekilde, doğru türde bir dosyaya tıkladığınızda, uygulamanız komut satırı arşivlerini başlatır ve okuyacaktır ve dosya ayrıntılarını görüntüleyecektir. Kullanıcı daha sonra uygulamanızı sağ üstteki OK (Tamam) düğmesiyle kapatırsa, gerçek için kapanacaktır, böylece bir sonraki açışında yeni bir örnek açılır ve komut satırı doğru bir şekilde okunur. Veya, kullanıcı WinMo'da başka bir programa giderse, uygulamanızın Deactivate olayı, uygulamayı kapatır.Her iki durumda da, uygulama her zaman açık ya da üstü ya da tamamen kapalıdır, bu yüzden dosya gezgini içindeki bir dosya tıklatıldığında her zaman yeni bir örnek açılır. Hızlı yanıt için Tks.

+0

Kutunun dışında düşünmek. aferin (CF'de başlangıç ​​zamanlarından dolayı kapatmamayı tercih ediyorum). – ctacke

+0

@ctacke: teşekkürler ve en son favori şakamı kullanma fırsatı için de teşekkürler: "Kutunun dışında düşünmüyorum, sadece daha büyük bir kutum var." :) – MusiGenesis

İlgili konular