Çö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

Decapat
Katılım
7 Aralık 2019
Mesajlar
43
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.
Katılım
9 Haziran 2016
Mesajlar
862
Makaleler
2
Çözümler
31
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.
 
KS
KS
F

Froxx

Decapat
Katılım
7 Aralık 2019
Mesajlar
43
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.
 
KS
KS
F

Froxx

Decapat
Katılım
7 Aralık 2019
Mesajlar
43
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:
Katılım
9 Haziran 2016
Mesajlar
862
Makaleler
2
Çözümler
31
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.
 
KS
KS
F

Froxx

Decapat
Katılım
7 Aralık 2019
Mesajlar
43
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. :/
 
Katılım
9 Haziran 2016
Mesajlar
862
Makaleler
2
Çözümler
31
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
KS
KS
F

Froxx

Decapat
Katılım
7 Aralık 2019
Mesajlar
43
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ı.
Yukarı