Programlamaya gelince acemiyim ama evrensel kurallardan birinin bir programın Main () ile başlaması olduğundan emindim. Bir WPF projesi oluşturduğumda bir tane görmüyorum. Main (), WPF'de farklı bir şekilde mi adlandırılır?
Programlamaya gelince acemiyim ama evrensel kurallardan birinin bir programın Main () ile başlaması olduğundan emindim. Bir WPF projesi oluşturduğumda bir tane görmüyorum. Main (), WPF'de farklı bir şekilde mi adlandırılır?
Yanıtlar:
Oluşturma sırasında oluşturulur, ancak kendinizinkini sağlayabilirsiniz (gerektiğinde proje özelliklerinde belirsizliği ortadan kaldırarak). Bir uygulama dosyası için obj / debug'a bakın; Şunlara sahibim ("C # 2010 Express" izniyle) App.g.i.cs
:
namespace WpfApplication1 {
/// <summary>
/// App
/// </summary>
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
public partial class App : System.Windows.Application {
/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public void InitializeComponent() {
#line 4 "..\..\..\App.xaml"
this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
#line default
#line hidden
}
/// <summary>
/// Application Entry Point.
/// </summary>
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public static void Main() {
WpfApplication1.App app = new WpfApplication1.App();
app.InitializeComponent();
app.Run();
}
}
}
App.g.cs
de var. Ama eklemeye çalıştım Main()
ve projemi her yeniden inşa ettiğimde, burada sahip olduğunuz şeye geri dönüyordu. Başka bir sınıfta kendiminkini oluşturmaya çalıştım, ancak Proje Özellikleri yalnızca MyProject.App'i bulur, diğer sınıfı değil, bu nedenle onu yeniden yönlendiremezsiniz.
App.xaml.cs
görsel stüdyoda açın . Gezinme çubuğu> Yöntem açılır listesini kullanın> Main
(gri renkte) öğesini seçin . Bu sizi götürür App.g.i.cs
.
Main () yöntemi otomatik olarak oluşturulur. Kendiniz sağlamak istiyorsanız, yapmanız gerekenler (VS2013 ve VS2017'de test edilmiştir):
Ardından, App.xaml.cs'ye bir Main () yöntemi ekleyin. Şöyle olabilir:
[STAThread]
public static void Main()
{
var application = new App();
application.InitializeComponent();
application.Run();
}
Main()
CLR ve WPF tarafından otomatik olarak sağlanır.
C # derleyicisi, .NET Framework /m
uygulamasını içeren türü belirten bir komut satırı anahtarını alır Main()
. Kural olarak, hiçbir başlangıç nesnesi açıkça belirtilmezse, CLR statik bir Main()
yöntemi olan herhangi bir sınıfı arar ve onu çağırır. (@Marc Gravel'in yorumunda belirttiği gibi)
WPF durumunda, Main()
oluşturulduğunda otomatik olarak oluşturulur App.xaml
ve C # derleyicisinin bu sınıfı giriş noktası olarak kullanması için / m anahtarı belirtilir. Ancak proje özelliklerine bakarsanız, başlangıç nesnesini seçmeniz için bir ayar olduğunu göreceksiniz. Yani isterseniz, uygulayan kendi sınıfınızı sağlayabilirsiniz Main()
.
Bunun, WPF altyapısının düzgün şekilde başlatıldığından emin olmak için Application
örneği oluşturma ve Run()
yöntemini çağırma sorumluluğunu size yükleyeceğini unutmayın.
/m
o değil bakım türü ne denir; Eğer açık değilse sadece bulmaya çalışır herhangi uygun Main
bir yöntem ve 0 veya birden fazla bulursa şikayet ediyor. Örnek olarak, dil spesifikasyonundaki (§1.1) "Merhaba Dünya" örneği Hello
, tür adı olarak kullanır .
main()
CLR (çalışma zamanı) tarafından sağlandığını söylemek gerçekten doğru değil, gerçekten onu oluşturan derleyicidir.
MyApp.App app = new MyApp.App();
) eklemeleri .Run()
ve önceki gibi çağırmaları gerektiğini hatırlatmak için + 1'im eklendi Main()
. İyi karar. Ayrıca, daha app.InitializeComponent();
önce eklememiz gerekecek app.Run()
ve neyse ki bizim için orijinal InitializeComponent()
yöntem hala orada (App.g.cs'de görülüyor, bu yüzden onu tekrar eklemenize gerek yok!).
main()
bir uygulama için standart bir giriş noktasıdır, ancak tüm uygulamalar bu şekilde yapılandırılmıştır. Bir XAML projesinde, App.XAML dosyası, söylediği giriş noktasını belirtir StartupUri="MainWindow.xaml"
.
Başkalarının da belirttiği gibi, asıl ana işlev, projedeki XAML dosyalarının içeriğine göre oluşturulur.
Ana pencere olmayan başka bir projede yüklenmeyen dosyaları yenisine kopyaladım ve bu hatayı aldım.
Benim için Andreas Kahler'e tam tersi bir yaklaşımı uygulamak gerekiyordu:
Bir pencere dosyası oluşturduktan ve başlangıç uri'sini bu dosyaya ayarladıktan sonra, App.xaml 'Build Action' özelliğinin ApplicationDefinition'ı olarak değiştirdim.
Varsayılan App.xaml ve MinWindow.xaml'yi kaldırdıysanız, .csproj'u düzenlemek daha iyidir App.xaml'i manuel olarak ekledikten sonra, .csproj dosyanız şu şekilde olacaktır:
<Page Include ="App.xaml">
<DependentUpon>MSBuild:Compile</DependentUpon>
<SubType>Code</SubType>
</Page>
Bunu şu şekilde değiştirin:
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>