Ich entwickle ein Programm, mit dem Sie mehrere XML-Dateien auswählen und an einen Webserver senden können.Multi Threading, Thread läuft, ohne auf andere Threads zu warten
Jede gesendete XML-Datei würde in einem Thread ausgeführt werden, sodass der Datenversand parallel ausgeführt wird. Das Problem, das ich habe, ist, dass wenn ich die erste Datei gebe, es früh antwortet, ohne sogar die nächsten paar Dateien einzugeben.
Ich weiß nicht, wie alle Threads warten, bis ich tippe, um zu beginnen, alle auf einmal auf einzelnen threads zu senden. Ich versuchte eine Implementierung unten, aber es reagiert zu früh, nachdem ich die erste Datei eingegeben habe.
Heres mein Code:
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");
fileName = Console.ReadLine();
Thread t = new Thread(new ParameterizedThreadStart(send));
threads.Add(t);
}
while (fileName != "start"); //Ends if user enters an empty line
foreach (Thread t in threads)
{
t.Start();
}
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();
}
}
}
}
Verwenden Sie den Task und nicht Thema: http://stackoverflow.com/questions/13429129/task-vs-thread-differences Beispiel: http://stackoverflow.com/a/26588973/47351 – RvdK
Was meinst du mit "es antwortet"? Du benutzt diesen Satz zweimal, aber ich verstehe nicht, was "es" ist und wie diese Antwort lauten würde. –
Die Antwort kommt vom Server zu schnell, da es in der Hauptsache der Antwortteil ist. unter dem // Get Response-Teil – Freon