Belajar C# - Desktop & Cross-platform Apps
Series/Belajar C#/Episode 21
Episode 21 of 23

Belajar C# - Desktop & Cross-platform Apps

Episode ini membahas pengembangan aplikasi desktop dan lintas platform: .NET MAUI untuk Android, iOS, dan Windows, dasar WPF dan WinForms untuk Windows, interoperabilitas dengan native libraries, serta packaging dan distribusi aplikasi desktop.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Sampai episode 20 kalian berkutat di sisi server. Sekarang kita melihat sisi yang sama pentingnya: aplikasi yang dijalankan pengguna di desktop dan perangkat seluler. C# menawarkan opsi lengkap untuk ini.

Satu kode C# bisa dijalankan di Android, iOS, dan Windows lewat .NET MAUI, sementara WPF dan WinForms tetap menjadi pilihan utama untuk aplikasi Windows yang matang. Semuanya berbagi bahasa, runtime, dan ecosystem yang sama.

Episode 21 ini membahas .NET MAUI, dasar WPF dan WinForms, interoperabilitas dengan native libraries, serta packaging dan distribusi aplikasi desktop.

.NET MAUI dan Cross-platform Development

Membuat Project MAUI

.NET MAUI (Multi-platform App UI) memungkinkan satu project C# menghasilkan aplikasi untuk Android, iOS, macOS, dan Windows:

Membuat project MAUI
dotnet new maui -n AplikasiKantin

Perintah dotnet new maui -n AplikasiKantin menciptakan project dengan struktur bersama: file XAML untuk antarmuka dan C# untuk logika. UI didefinisikan sekali dengan XAML dan di-render native di tiap platform:

Antarmuka XAML sederhana
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
  <VerticalStackLayout Padding="30" Spacing="10">
    <Label Text="Menu Kantin" FontSize="32"
           HorizontalOptions="Center" />
    <Button Text="Lihat Menu"
            Clicked="OnLihatMenuClicked" />
  </VerticalStackLayout>
</ContentPage>

Kode-behind C# menangani interaksi:

Code-behind MAUI
public partial class MainPage : ContentPage
{
    public MainPage() => InitializeComponent();
 
    private void OnLihatMenuClicked(object sender, EventArgs e)
    {
        DisplayAlert("Menu", "Nasi Goreng, Sate, Es Teh", "OK");
    }
}

DisplayAlert menampilkan dialog native. Dengan model ini, satu codebase melayani banyak platform tanpa menulis ulang antarmuka.

Dasar WPF dan WinForms untuk Windows

WPF untuk Aplikasi Desktop Windows

WPF adalah framework desktop paling matang untuk Windows, dengan rendering berbasis vector dan dukungan tema:

Membuat jendela WPF
dotnet new wpf -n AplikasiWindows

WPF memakai XAML juga, namun menargetkan Windows saja. Window menjadi wadah utama, dan layout seperti Grid serta StackPanel menyusun elemen UI. WPF adalah pilihan untuk aplikasi enterprise Windows yang butuh antarmuka kompleks.

WinForms yang Pragmatis

WinForms adalah pendekatan yang lebih sederhana: drag-and-drop control di designer, ringan, dan sangat cocok untuk tool internal:

WinForms sederhana
var form = new Form { Text = "Kalkulator", Width = 300, Height = 200 };
var tombol = new Button { Text = "Hitung", Location = new Point(20, 20) };
 
tombol.Click += (s, e) =>
    MessageBox.Show("Hasil: 42", "Kalkulator");
 
form.Controls.Add(tombol);
Application.Run(form);

Pola pembuatan jendela dan tombol di atas memakai constructor dan event handler — kode yang sudah kalian kenal dari seluruh series ini. Untuk pengembangan cepat tool internal, WinForms tetap juara.

Interoperability dengan Native Libraries

P/Invoke untuk Fungsi Native

Aplikasi desktop sering harus memanggil library native seperti Win32 atau DLL pihak ketiga. P/Invoke (Platform Invoke) melakukan ini secara langsung:

Memanggil fungsi native
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
static extern int MessageBox(IntPtr hWnd, string teks, string judul, uint tipe);
 
var hasil = MessageBox(IntPtr.Zero, "Halo dari native", "P/Invoke", 0);
Console.WriteLine($"Kode hasil: {hasil}");

DllImport("user32.dll") mendeklarasikan fungsi Windows native agar bisa dipanggil dari C#. Dengan pola yang sama, kalian bisa memanggil library C dari Linux atau macOS — inilah pintu interoperabilitas .NET dengan ekosistem native.

Calling Conventions dan Marshaling

Saat memanggil native code, perhatikan calling convention dan marshaling tipe data. Pointer memakai IntPtr, string memakai CharSet yang benar, dan struct native ditandai dengan [StructLayout]. Salah di sini menyebabkan crash misterius — selalu uji di platform target.

Packaging dan Distribution

Mempublikasikan Aplikasi Desktop

Untuk distribusi, kalian bisa mengemas aplikasi menjadi installer atau eksekusi mandiri:

Publish self-contained WPF
dotnet publish -c Release -r win-x64 --self-contained -o publish

Perintah dotnet publish -c Release -r win-x64 --self-contained menghasilkan folder yang berisi aplikasi dan runtime .NET sekaligus — pengguna tidak perlu menginstall .NET secara terpisah. Output ini bisa dibungkus installer dengan MSIX, WiX, atau Inno Setup untuk WPF.

Platform untuk Distribution MAUI

Untuk MAUI, distribusi mengikuti toko masing-masing platform: Google Play untuk Android, App Store untuk iOS, dan MSIX atau store untuk Windows. Code signing wajib untuk publikasi resmi.

Penutup

Inti yang harus dibawa pulang:

  • .NET MAUI menjalankan satu codebase di Android, iOS, macOS, dan Windows.
  • WPF untuk aplikasi Windows yang kompleks; WinForms untuk tool internal cepat.
  • P/Invoke memanggil fungsi native dari C#.
  • Publishing self-contained menghilangkan kebutuhan install runtime.
  • Distribusi mengikuti jalur toko atau installer sesuai platform.

Di episode 22 terakhir kita melihat ke depan: future trends dan stable modern features — records, pattern matching, dan nullable reference types, Native AOT dan source generators, fitur modern .NET 8 dan 9 beserta roadmap, serta strategi menjaga keahlian C# tetap relevan.

Belajar C# - Desktop & Cross-platform Apps | Belajar C#