【发布时间】:2023-04-10 03:23:01
【问题描述】:
首先,我开发了一个简单的 XML 发送器,它将 xml 数据从一个文件发送到一个 Web 服务器,该服务器被编码为一个循环,因此一次只有一个 XML 文件。
现在我想让它成为多线程,这意味着我输入让我们说 XML 文件的 3 个文件名,并为每个文件创建一个线程并并行发送到网络服务器。下面是我当前的实现,我尝试通过在这里和那里添加工作线程来搞乱。编辑* 所以问题是我如何多线程这种类型的程序?
下面是我目前的实现:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
namespace XMLSender
{
class Program
{
private static string serverUrl;
static void Main(string[] args)
{
Console.WriteLine("Please enter the URL to send the XML File");
serverUrl = Console.ReadLine();
List<Thread> threads = new List<Thread>();
string fileName = "";
do
{
Console.WriteLine("Please enter the XML File you Wish to send");
Thread t = new Thread(new ParameterizedThreadStart(send));
t.Start(fileName = Console.ReadLine());
threads.Add(t);
}
while (fileName != "start"); //Ends if user enters an empty line
foreach (Thread t in threads)
{
t.Join();
}
}
static private void send(object data)
{
try
{
//ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serverUrl);
byte[] bytes;
//Load XML data from document
XmlDocument doc = new XmlDocument();
doc.Load((string)data);
string xmlcontents = doc.InnerXml;
//Send XML data to Webserver
bytes = Encoding.ASCII.GetBytes(xmlcontents);
request.ContentType = "text/xml; encoding='utf-8'";
request.ContentLength = bytes.Length;
request.Method = "POST";
Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
// Get response from Webserver
HttpWebResponse response;
response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
string responseStr = new StreamReader(responseStream).ReadToEnd();
Console.Write(responseStr + Environment.NewLine);
}
catch (Exception e)
{
Console.WriteLine("An Error Occured" + Environment.NewLine + e);
Console.ReadLine();
}
}
}
}
【问题讨论】:
-
有什么问题?
-
主要的想法是我如何多线程这种类型的应用程序,我在上面更新它
-
那么您在当前实现的多线程空间中尝试过什么?你能展示你遇到的代码、发布错误或问题吗?
-
我查看了 MSDN c# multithreading reference 上的几个示例,但看到所有不同类型的实现让我感到困惑。在这里也可以使用 async 吗?
-
其实我可能有个想法,一试就更新代码
标签: c# xml multithreading