यह सवाल पिछले एक सवाल का एक अनुवर्ती है कि मैं कहा था है के रूप में ठीक काम करता है:टास्क लाइब्रेरी कोड फ़्रीज़ समानांतर एक Windows Forms में आवेदन - एक Windows कंसोल आवेदन
How to Perform Multiple "Pings" in Parallel using C#
मैं करने में सक्षम था काम करने के लिए स्वीकृत उत्तर (एक विंडोज कंसोल एप्लिकेशन) प्राप्त करें, लेकिन जब मैंने विंडोज फॉर्म एप्लिकेशन में कोड चलाने की कोशिश की, तो निम्न कोड Task.WaitAll(pingTasks.ToArray())
युक्त लाइन पर जमा हो जाएगा। यहाँ कोड है कि मैं चलाने के लिए कोशिश कर रहा हूँ है:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.NetworkInformation;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
List<String> addresses = new List<string>();
for (Int32 i = 0; i < 10; ++i) addresses.Add("microsoft.com");
List<Task<PingReply>> pingTasks = new List<Task<PingReply>>();
foreach (var address in addresses)
{
pingTasks.Add(PingAsync(address));
}
//Wait for all the tasks to complete
Task.WaitAll(pingTasks.ToArray());
//Now you can iterate over your list of pingTasks
foreach (var pingTask in pingTasks)
{
//pingTask.Result is whatever type T was declared in PingAsync
textBox1.Text += Convert.ToString(pingTask.Result.RoundtripTime) + Environment.NewLine;
}
}
private Task<PingReply> PingAsync(string address)
{
var tcs = new TaskCompletionSource<PingReply>();
Ping ping = new Ping();
ping.PingCompleted += (obj, sender) =>
{
tcs.SetResult(sender.Reply);
};
ping.SendAsync(address, new object());
return tcs.Task;
}
}
}
किसी को भी कारण है कि यह ठंड है के रूप में किसी भी विचार है?
हाँ !!! मुझे 'टास्क। WaitAll() 'के बजाय' प्रतीक्षा टास्क। जब सभी()' का उपयोग करना पड़ा था ... मुझे बटन_क्लिक ईवेंट में 'async' भी जोड़ना पड़ा। मैं आपको इस प्रश्न का उत्तर देने के लिए क्रेडिट दूंगा। धन्यवाद! – HydroPowerDeveloper
पूर्णता के लिए, क्या हम 5.0 से पहले सी # का उपयोग करते समय वैकल्पिक समाधान प्राप्त कर सकते हैं? – Pete
मैं दूसरा पीट का अनुरोध ... मैं भी <5.0 समाधान जानना चाहता हूं। – HydroPowerDeveloper