Selamlar,
bir oyun için c# üzerinden launcher yapıyorum. büyük bir kısmını bitirdim fakat eksiklikleri mevcut.
Yapmak istediğim şey;
https://www.behance.net/gallery/118581873/Game-Launcher
burada ki görselde kurulan dosyaların ismini labelde gösteriyor ve indirirken kaç mb kaldığını gösteriyor. Bunları kendi projemde yapmak istiyorum biraz araştırma yaptım fakat gerekli bilgiyi bulamadım chatgpt bile denedim ama bi türlü hayata geçiremedim.Destek olacak arkadaşlar varsa şimdiden teşekkür ederim.
C# bir kaç soru
3
●140
- 02-12-2024, 20:54:36
- 02-12-2024, 21:16:06Hocam bende chatgpt ye sordum umarım işine yarar
C# kullanarak bir oyun launcher'ında dosya indirme sürecini gösteren bir arayüz yapmak için aşağıdaki adımları izleyebilirsiniz:
1. Gerekli Bileşenleri Tanımlayın
- ProgressBar: Dosya indirme yüzdesini göstermek için.
- Label: İndirilen dosya adı ve toplam indirme durumu için.
- HttpClient veya WebClient: Dosya indirme işlemi için.
2. Form Tasarımı
Windows Forms veya WPF kullanarak bir kullanıcı arayüzü oluşturabilirsiniz:- İki ProgressBar ekleyin:
- progressBarFile: İndirilen dosya yüzdesini gösterecek.
- progressBarTotal: Tüm indirme sürecini gösterecek.
- Bir Label ekleyin: İndirilen dosya adını ve toplam indirme durumunu göstermek için.
3. Kodlama
Aşağıdaki örnek kod, indirme işlemini gerçekleştirir ve ilerleme durumunu günceller:
using System;
using System.Net;
using System.Windows.Forms;
namespace Launcher
{
public partial class Form1 : Form
{
private int totalFiles = 0;
private int downloadedFiles = 0;
private long totalBytes = 0;
private long downloadedBytes = 0;
private string[] filesToDownload = { "https://example.com/file1.uax", "https://example.com/file2.uax" };
private string downloadPath = @"C:GameFiles";
public Form1()
{
InitializeComponent();
}
private void StartDownload()
{
totalFiles = filesToDownload.Length;
progressBarTotal.Maximum = 100;
foreach (var fileUrl in filesToDownload)
{
DownloadFile(fileUrl);
}
}
private async void DownloadFile(string fileUrl)
{
using (WebClient client = new WebClient())
{
client.DownloadProgressChanged += Client_DownloadProgressChanged;
client.DownloadFileCompleted += Client_DownloadFileCompleted;
string fileName = System.IO.Path.GetFileName(fileUrl);
lblCurrentFile.Text = $"Downloading: {fileName}";
await client.DownloadFileTaskAsync(new Uri(fileUrl), downloadPath + fileName);
}
}
private void Client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
progressBarFile.Value = e.ProgressPercentage;
lblCurrentFile.Text = $"Downloading: {e.ProgressPercentage}%";
// Toplam indirme ilerlemesini hesapla
downloadedBytes += e.BytesReceived;
progressBarTotal.Value = (int)((downloadedBytes * 100) / totalBytes);
}
private void Client_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
downloadedFiles++;
if (downloadedFiles == totalFiles)
{
MessageBox.Show("All files downloaded successfully!");
}
}
}
}
4. Özelleştirme
- Dosya İsmini ve Boyutunu Gösterme: Client_DownloadProgressChanged içinde e.TotalBytesToReceive ve e.BytesReceived değerlerini kullanabilirsiniz.
- Daha Güzel Arayüz: Örneğin, resim, stil ve animasyonlar eklemek için WPF tercih edilebilir.
5. Notlar
- Tüm dosyaların toplam boyutunu (totalBytes) önceden hesaplamak için her dosyanın boyutunu indirme başlamadan önce bir HTTP HEAD isteği ile öğrenebilirsiniz.
- async ve await kullanarak UI’nin donmasını engellersiniz.
- 02-12-2024, 21:33:15seferozdmr adlı üyeden alıntı: mesajı görüntüle