gpt4 book ai didi

c# - 线程FTP上传C#

转载 作者:行者123 更新时间:2023-12-03 13:20:37 24 4
gpt4 key购买 nike

我在弄清楚如何线程化我的FTP上传脚本时遇到了麻烦。我正在尝试使其从C#控制台应用程序上传。我不喜欢它在上传时冻结应用程序的事实。我听说过使用过“backgroundworker”,但我完全不知道如何设置它。能给我举个例子?谢谢。

if ((Keys)vkCode == Keys.Enter)
{
//~~~ Enter Key pressed ~~~ //
string ftpsrc = Application.StartupPath + @"/logs/log.txt";
FtpWebRequest request2 = (FtpWebRequest)WebRequest.Create("ftp://server.com" + System.Environment.MachineName + "___" + System.Environment.UserName + @"/" + "log.txt");
request2.Method = WebRequestMethods.Ftp.UploadFile;
request2.Credentials = new NetworkCredential("username", "password");
StreamReader sourceStream2 = new StreamReader(ftpsrc);
byte[] fileContents2 = Encoding.UTF8.GetBytes(sourceStream2.ReadToEnd());
sourceStream2.Close();
request2.ContentLength = fileContents2.Length;
Stream requestStream2 = request2.GetRequestStream();
requestStream2.Write(fileContents2, 0, fileContents2.Length);
requestStream2.Close();
FtpWebResponse response2 = (FtpWebResponse)request2.GetResponse();
response2.Close();


//~~~ End Enter Key ~~~//
}

最佳答案

一种非常简单的方法是使用BackgroundWorker之类的东西,它使您可以访问诸如进度事件之类的东西以及对执行的控制。通过此方法,您可以将UI线程与FTP上传的逻辑完全分开。这意味着您的UI会响应,无论上传完成了多长时间。

现在,多线程的实际上传是另一回事。如果那是您想要的,那将需要将消息分成相等的部分,并在FTP端重新组装这些部分,但这也意味着编写自定义的ftp服务器。

在这里查看有关BackgroundWorker是什么以及如何使用它的完整说明:
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

编辑::

好吧,请在注释中回答有关如何设置背景工作程序以在Enter键上执行的问题。看一下上面的文档,以大致了解如何使用backgroundworker。

您可能想使用您设置的后台工作程序的RunWorkerAsync()方法来更改当前的键 Hook 。 BackgroundWorker的DoWork方法应该是您当前在 key Hook 中拥有的方法。

    BG.DoWork += YourUploadFunction();

if ((Keys)vkCode == Keys.Enter)
{
//~~~ Enter Key pressed ~~~ //
BG.RunWorkerAsync();
}

要初始化 BackgroundWorker,请执行以下操作:
    BackgroundWorker BG = new BackgroundWorker();
BG.DoWork += new DoWorkEventHandler(BG_DoWork);
DoWorkEventHandler允许创建新的处理程序来控制BG将执行的功能。例如:
    private void BG_DoWork(object sender, DoWorkEventArgs e)
{
YourUploadFunctions();
}

但是,您只想对 BackgroundWorker进行一次初始化,以使它没有多个实例。同样,一旦设置了DoWork事件,就无需再次执行它。
`

关于c# - 线程FTP上传C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16311098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com