私は、メソッドを実行するC#でスレッドを作成するメソッドを持っています(CallCheckLogic - 下記参照)。 )メソッド(例えば、ChecksObject.Check1Logic())スリープスレッドメソッドのようなループは無視されています。私には論理的な意味はありません。誰かがこの行動が起こっている理由を説明できるでしょうか?スレッドが眠っていないと言われたとき
期待される結果:自体は、その後、その後のThread.sleep(60000)ChecksObject.Check1Logic >> ChecksObject.Check7Logicを呼び出し、新しいスレッドが作成され、方法CallCheckLogicが呼び出されます。スレッドが60秒間スリープ状態になると、ループが実行され、CallCheckLogicが再び実行されます。
private void StartCheckerThread()
{
Thread t = new Thread(o =>{CallCheckLogic();});t.Start();
running = true;
}
public void CallCheckLogic()
{
Checks ChecksObject = new Checks();
ChecksObject.Check1Logic();
ChecksObject.Check2Logic();
ChecksObject.Check3Logic();
ChecksObject.Check4Logic();
ChecksObject.Check5Logic();
ChecksObject.Check6Logic();
ChecksObject.Check7Logic();
// This method/delegate parses the outfile of "temp" or rather the results of the tests and turns on/off the appropriate light on the GUI
LightControlDelegate d1 = new LightControlDelegate(lightControl);
this.BeginInvoke(d1);
Thread.Sleep(60000);
//LoopPorts();
}
ChecksObject.Check1Logic方法:私はここにすべてのループが表示されない
public void Check1Logic()
{
// clean up time!
File.Create("temp").Dispose();
// lets grabs the info from the config!
var lines = File.ReadAllLines("probe_settings.ini");
var dictionary = lines.Zip(lines.Skip(1), (a, b) => new { Key = a, Value = b })
.Where(l => l.Key.StartsWith("#"))
.ToDictionary(l => l.Key, l => l.Value);
// lets define variables and convert the string in the dictionary to int for the sock.connection method!
int portno1;
int.TryParse(dictionary["#PortNo1"], out portno1);
// Convert hostname to IP, performance issue when using an invalid port on a hostname using the TcpClient class!
IPAddress[] addresslist = Dns.GetHostAddresses(hostname2);
foreach (IPAddress theaddress in addresslist)
{
// Attempt to create socket and connect to specified port on host
TcpClient tcP = new System.Net.Sockets.TcpClient();
try
{
tcP.ReceiveTimeout = 1;
tcP.SendTimeout = 1;
tcP.Connect(theaddress, portno1);
tcP.Close();
StreamWriter sw = File.AppendText("temp");
sw.Flush();
sw.WriteLine("Check1=Success");
sw.Close();
}
catch
{
StreamWriter sw = File.AppendText("temp");
sw.WriteLine("Check1=Fail");
sw.Close();
}
}
}
+1 ...陽気な:) :) :) – TheBoyan
真剣に、CallCheckLogic()スレッドはSleep()になります。あなたはそれがそうではないと思いますか?あなたはループ部分を残しました。 –
"ChecksObject.CheckXLogic"メソッドでチェックされているbingのリモートポートが継続的に(メソッドがループしているように)表示されているため、ChecksObject.Check1Logicメソッドを追加しました。多くの場合同じ) – Mike