У меня есть кнопка в форме, если я нажимаю на кнопку и начинаю проверять, существует ли каталог на FTP-сервере или нет, если нет, то каталог будет создан. После этой загрузки изображения в каталог, который был создан ранее, но это приводит к зависанию формы, поэтому я не могу ничего сделать в форме в течение нескольких секунд.
--- Проверка, существует ли каталог, и создать если нет ---
private bool CreateFTPDirectory()
{
try
{
FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://127.0.01" + txtDirName.Text));
requestDir.Method = WebRequestMethods.Ftp.MakeDirectory;
requestDir.Credentials = new NetworkCredential("username", "password");
requestDir.UsePassive = true;
requestDir.UseBinary = true;
requestDir.KeepAlive = false;
FtpWebResponse response = (FtpWebResponse)requestDir.GetResponse();
Stream ftpStream = response.GetResponseStream();
ftpStream.Close();
response.Close();
return true;
}
catch (WebException ex)
{
FtpWebResponse response = (FtpWebResponse)ex.Response;
if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
{
response.Close();
return true;
}
else
{
response.Close();
return false;
}
}
}
--- Событие нажатия кнопки (загрузка файла) ---
private void btnApply_Click(object sender, EventArgs e)
{
CreateFTPDirectory(); /// calling the private bool CreateFTPDirectory
string imgname = "xyz.jpg";
System.Net.FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://127.0.0.1/" + txtDirName.Text + "/" + imgname);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential("username", "password");
using (MemoryStream sourceStream = new MemoryStream())
{
PointF infoLocation = new Point((Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2, 0);
string date = DateTime.UtcNow.ToString("dd.MM.yyyy");
Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height);
Graphics graphics = Graphics.FromImage(bitmap as Image);
graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size);
using (Font arialFont = new Font("Arial", 10))
{
graphics.DrawString(date, arialFont, Brushes.Green, infoLocation);
}
bitmap.Save(sourceStream, ImageFormat.Jpeg);
using (System.IO.Stream requestStream = request.GetRequestStream())
{
sourceStream.Position = 0; sourceStream.CopyTo(requestStream);
}
}
}