C# Çoklu İşlem Sisteminimetod üzerinden yapma kodunda hata

194929

Megapat
Katılım
22 Haziran 2016
Mesajlar
720
Çözümler
2
Yazdığım programda kolaylık sağlamak açısından bazı metotlar hazırlıyorum ve çoklu işlemler için kolaylaştırılmış bir metot yazmak istedim. Fakat kullanmak istediğimde hata alıyorum. Yardımcı olabilir misiniz rica etsem?

Niyetim Thread ögesini bir metot içine sokup her kullanmam geretiğinde tekrar Thread sınıfından nesne oluşturmamak. Bu sayede CokluIslemBaslat(CagrilacakMetot()); yazdığımda bu işlemin gerçekleştirilmesini istiyorum. Korkum her şeyi baştan yazmak zorunda kalmak.
Hata "C:\Users\Administrator\Desktop\VDDW\VDDW\Program.cs(16,13): error CS1503: 1 bagimsiz degiskeni: 'void' ögesinden 'System.Threading.ParameterizedThreadStart' ögesine dönüstürülemiyor [C:\Users\Administrator\Desktop\VDDW\VDDW\VDDW.csproj]"

[CODE lang="csharp" title="CokluIslemSistemi.cs"] public static void CokluIslemBaslat (ParameterizedThreadStart CokluIslemFonksiyonu)
{
Console.WriteLine("Çoklu işlem sistemi başlatıldı.");
Thread CokluIslem = new Thread(CokluIslemFonksiyonu);
CokluIslem.Start();
}[/CODE]

[CODE lang="csharp" title="Program.cs"]using System;
using System.Net;
using System.IO;

using static DownloadManager;
using static configGenel;
using static VeriTabani;
using static CokluIslemSistemiKutuphaneleri;

public class Program
{
public static void Main(string[] args)
{

CokluIslemBaslat(
HizliDosyaIndir("https://www.rarlab.com/rar/winrar-x64-601tr.exe","C:/Users/Administrator/Desktop/VDDW/VDDW/Indirilenler/","WinRAR","exe")
);

VeriTabaniBilgileriniAl(CFSunucuAdresi,CFVeritabaniAdi,CFKullaniciAdi,CFSifre,MySqlPort,true);
VeriTabaninaBaglantisiniBaslat();

}
}
[/CODE]

[CODE lang="csharp" title="DownloadManager.cs"]using System;
using System.Net;
using System.IO;

using static configGenel;

public static class DownloadManager {

public static void AgKontrol()
{
bool AgDurumu = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();
if (AgDurumu==true) {
Console.WriteLine("Ağ Durumu: Aktif!");
}
else if (AgDurumu==false) {
Console.WriteLine("Ağ Durumu: Pasif!");
}
}

public static string DosyaBilgileriniAl (String DosyaAdresi,String DosyaYolu,String DosyaAdi,String DosyaTuru)
{
//Dosya adresi yönetimi.
if (DosyaAdresi == null) {
Console.WriteLine("Hata: Parametredeki ifade bir geçerli bir web ifadesi değil.");
}
else if (DosyaAdresi != null) {
Console.WriteLine("İşlem: Dosyanın indirileceği web adres seçildi.");
}

//Dosya yolu yönetimi.
if (DosyaYolu == null) {
DosyaYolu = CFDosyaYolu;
Console.WriteLine("İşlem: Dosyanın kaydedileceği dizin varsayılan olarak seçildi.");
}
else if (DosyaYolu != null) {
//DosyaYolu = DosyaYolu;
Console.WriteLine("İşlem: Dosyanın kaydedileceği dizin parametreden seçildi.");
}
//Dosya adı yönetimi.
if (DosyaAdi == null) {
Console.WriteLine("İşlem: Dosya adı parametreden alınamadı!");
Random RastgeleSayiOlusturucuNesne = new Random();
int rasgeleSayiAdi =RastgeleSayiOlusturucuNesne.Next(1,1000000);
String rasgeleDosyaAdi = "File";
//bool DosyaAdiKontrolu = File.Exists(); Bu kısım spilitle bilgiler ayarlandıktan sonra yapılacak
DosyaAdi = rasgeleDosyaAdi + rasgeleSayiAdi;
Console.WriteLine("İşlem: Dosyaya rasgele bir isin seçildi.");
}
else if (DosyaAdi != null) {
Console.WriteLine("İşlem: Dosya adı parametreden alındı..");
}
//Dosya türü yönetimi.
if (DosyaTuru == null) {
Console.WriteLine("Hata: Parametreden dosya uzantısı alınamadı.");
DosyaTuru = "."+"CFunknown";
Console.WriteLine("İşlem: Uzantı bilinmediği için rasgele atama yapıldı.");
}
else if (DosyaTuru != null) {
Console.WriteLine("İşlem: Parametreden dosya uzantısı alındı.");
}
CFDosyaAdresi = DosyaAdresi;
CFDosyaYolu = DosyaYolu;
CFDosyaAdi = DosyaAdi;
CFDosyaTuru = DosyaTuru;

Console.WriteLine("İşlem: İndirilecek dosyanın adresi: " + DosyaAdresi);
Console.WriteLine("İşlem: İndirilecek dosyanın kaydedileceği dizin: " + DosyaYolu);
Console.WriteLine("İşlem: İndirilecek dosyanın adı: " + DosyaAdi);
Console.WriteLine("İşlem: İndirilecek dosyanın uzantısı: " + DosyaTuru);
return DosyaAdresi + " " + DosyaYolu + " " + DosyaAdi + " " + DosyaTuru;
}

public static async void DosyaIndır ()
{
webErisimi.DownloadFile(CFDosyaAdresi,CFDosyaYolu+CFDosyaAdi+CFDosyaTuru);
}

public static bool DosyaVarmi ()
{
bool DosyaDurumu = File.Exists(CFDosyaYolu+CFDosyaAdi+CFDosyaTuru);
CFDosyaDurumu = DosyaDurumu;
return DosyaDurumu;
}

public static void DosyaBoyutunuAl ()
{
webErisimi.OpenRead(CFDosyaAdresi);
CFDosyaBoyutuBAYT = Convert.ToInt64(webErisimi.ResponseHeaders["Content-Length"]);

if (CFDosyaBoyutuBAYT >= 1073741824.0) {
CFDosyaBoyutuGB = CFDosyaBoyutuBAYT / 1073741824.0; //GB için.
Console.WriteLine("Bilgi: " + CFDosyaBoyutuGB + " GB");
}
else if (CFDosyaBoyutuBAYT >= 1048576.0) {
CFDosyaBoyutuMB = CFDosyaBoyutuBAYT / 1048576.0; //MB için.
Console.WriteLine("Bilgi: " + CFDosyaBoyutuMB + " MB");
}
else if (CFDosyaBoyutuBAYT >= 1024.0) {
CFDosyaBoyutuKB = CFDosyaBoyutuBAYT / 1024.0; //KB için.
Console.WriteLine("Bilgi: " + CFDosyaBoyutuKB + " KB");
}
else if (CFDosyaBoyutuBAYT >0 && CFDosyaBoyutuBAYT <1024.0) {
//CFDosyaBoyutuBAYT = CFDosyaBoyutuBAYT;
Console.WriteLine("Bilgi: " + CFDosyaBoyutuBAYT + " Bayt");
}

}

public static void HizliDosyaIndir (String IndirilecekDosyaAdresi,String DosyaninKaydedilecegiDizin,String DosyaAdi, String DosyaTuru)
{
AgKontrol();
DosyaBilgileriniAl(IndirilecekDosyaAdresi,DosyaninKaydedilecegiDizin,DosyaAdi,"."+DosyaTuru);
DosyaBoyutunuAl();
if (DosyaVarmi()) {
Console.WriteLine("İşlem: Dosya zaten sisteminizde var. İndirme pas geçildi.");
}
else {
DosyaIndır();
Console.WriteLine("İşlem: Dosya indirildi.");
}

}

}
[/CODE]
Yetkililer bazen cidden sinirimi bozuyor. Şu konu başlıklarına dokunmasanız ölürsünüz değil mi? Ben gayet açıklayıcı bir başlık seçtim ki buna rağmen yine de yetkililer kendi bildiğini okuyor. Sizden konu başlığını değiştirmenizi isteyen oldu mu?
 
Son düzenleme:
Projeni github'a yükleyip link atar mısın. Böyle kontrol etmesi biraz zor.
Hocam GitHub kullanmayı bilmiyorum ama dosyaları bir siteye yükledim. Buyrun.
 
Hocam GitHub kullanmayı bilmiyorum ama dosyaları bir siteye yükledim. Buyrun.
İndiriyorum, kontrol edip bilgi vereceğim.
HizliDosyaIndir metodunda geri dönüş değeri yok void tanımlamışsın, CokluIslemBaslat metodun ise parametrelerinde ParameterizedThreadStart var,

C#:
CokluIslemBaslat(HizliDosyaIndir("https://www.rarlab.com/rar/winrar-x64-601tr.exe","C:/Users/Administrator/Desktop/VDDW/VDDW/Indirilenler/","WinRAR","exe"));

Yukarıdaki kodda iç içe metod kullanamazsın, çünkü HızlıDosyaIndır metodun geriye değer döndermiyor.
 
Son düzenleme:
İndiriyorum, kontrol edip bilgi vereceğim.
HizliDosyaIndir metodunda geri dönüş değeri yok void tanımlamışsın, CokluIslemBaslat metodun ise parametrelerinde ParameterizedThreadStart var,

C#:
CokluIslemBaslat(HizliDosyaIndir("https://www.rarlab.com/rar/winrar-x64-601tr.exe","C:/Users/Administrator/Desktop/VDDW/VDDW/Indirilenler/","WinRAR","exe"));

Yukarıdaki kodda iç içe metod kullanamazsın, çünkü HızlıDosyaIndır metodun geriye değer döndermiyor.
Çok teşekkür ederim hocam. Peki sizce genel anlamda metot yapılarını nasıl bir şekle sokmalıyım. Yazdığım kodlardan da görebileceğiniz üzere oldukça acemiyim. Geriye döndürmeyi vb. bilsem de genelde kod mantığında kullanamıyorum. Her türlü tavsiyeye açığım, saygılar.
 
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Yeni konular

Geri
Yukarı