Çözüldü C# "because it is being used by another process." hatası

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Durum
Mesaj gönderimine kapalı.

Froxx

Hectopat
Katılım
7 Aralık 2019
Mesajlar
49
Merhaba, bir süredir C# öğreniyorum ve bir hata ile karşılaştım, hatayı çözmek için çok uğraştım ama çözemedim, ileri düzeyde bilgisi olan bir arkadaş Discord ismini verebilirse çok memnun olurum olurum.
Hata; 'because it is being used by another process.'
 
Çözüm
Kod:
private void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e){
    if(e.Error == null){
        var process = Process.Start(program_name);
        process.EnableRaisingEvents = true;
        process.Exited += (_,args) => {
            File.Delete(program_name);
            //Performs on process exited.
        };
    }
    else{
        //Error handling...
    }
}

PC başında değilim ama bunun işe yaraması lazım.
Kod:
private void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e){
    if(e.Error == null){
        using(Process process = Process.Start(program_name)){
            process.Exited += (_,args) => {
                File.Delete(program_name);
                //Performs on process exited.
            };
        }
    }
    else{
        //Error handling...
    }
}

Bu kod bahsedilen process sonlandığı an dosyayı silecektir. Bunu verdiğim metodun yerine yapıştırın.
 
Kod:
private void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e){
    if(e.Error == null){
        using(Process process = Process.Start(program_name)){
            process.Exited += (_,args) => {
                File.Delete(program_name);
                //Performs on process exited.
            };
        }
    }
    else{
        //Error handling...
    }
}

Bu kod bahsedilen process sonlandığı an dosyayı silecektir. Bunu verdiğim metodun yerine yapıştırın.
Maalesef hocam çalışmadı.

Kod:
Process[] pname = Process.GetProcessesByName("SteamSetup.exe");
if (pname.Length =! 0){
//kodunuz
}

C# bilmediğimden dolayı yazamadım. Ancak if içerisinde "AND" kullanmanız lazım.
İf (pname. Length =! 0 && File. Exists(program_name)) tarzı. Ya da arkadaşın dediği gibi Timer ile izleyebilirsiniz. Açıkçası verimli bir yöntem mi bilemiyorum. Lakin illaki daha düzenli ve doğru bir yöntem vardır.
Dediklerinizi yaptım lakin olmadı. Yinede sağolun hocam.
 
Nasıl olmadı? Hata mı veriyor? Lütfen daha fazla ayrıntı verin.
 
Nasıl olmadı? Hata mı veriyor? Lütfen daha fazla ayrıntı verin.
Hocam hata vermiyor ama programı da silmiyor.
1656858102200.png
 
Son düzenleme:
Kod:
private void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e){
    if(e.Error == null){
        var process = Process.Start(program_name);
        process.Exited += (_,args) => {
            File.Delete(program_name);
            //Performs on process exited.
        };
    }
    else{
        //Error handling...
    }
}

Böyle dener misiniz? Bu şekilde çalışması lazım. Using kullanarak sanırım Process'i event çağrılmadan önce dispose ettim.
 
Kod:
private void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e){
    if(e.Error == null){
        var process = Process.Start(program_name);
        process.Exited += (_,args) => {
            File.Delete(program_name);
            //Performs on process exited.
        };
    }
    else{
        //Error handling...
    }
}

Böyle dener misiniz? Bu şekilde çalışması lazım. Using kullanarak sanırım Process'i event çağrılmadan önce dispose ettim.
Hocam sonuç aynı, hata yok ve dosyayı silmiyor. :/
 
Kod:
private void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e){
    if(e.Error == null){
        var process = Process.Start(program_name);
        process.EnableRaisingEvents = true;
        process.Exited += (_,args) => {
            File.Delete(program_name);
            //Performs on process exited.
        };
    }
    else{
        //Error handling...
    }
}

PC başında değilim ama bunun işe yaraması lazım.
 
Çözüm
Kod:
private void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e){
    if(e.Error == null){
        var process = Process.Start(program_name);
        process.EnableRaisingEvents = true;
        process.Exited += (_,args) => {
            File.Delete(program_name);
            //Performs on process exited.
        };
    }
    else{
        //Error handling...
    }
}

PC başında değilim ama bunun işe yaraması lazım.
Hocam oldu size ve diğer arkadaşlara ne kadar teşekkür etsem azdır. Çok teşekkürlerim.
 
Durum
Mesaj gönderimine kapalı.

Geri
Yukarı