C# のこのコードに問題があります。
main class {
var trick = new Object();
}
.......
public void AddTabWithCheck(List<Urls> url)
{
//Some Code
foreach(Urls link in url){
var thread = new System.Threading.Thread(p =>
{
lock (trick)
{
Action action = () =>
{
addTab(link);
};
this.Invoke(action);
if(link.Host == "google")
System.Threading.Thread.Sleep(5000);
}
});
thread.Start(); }
}
winappフォームで時間遅延を行うのに問題がありました。
スレッド sleep 、 while(withDatetime) または同様の WinAPP 内に WebControl Browser があり、UI をフリーズせずに遅延時間のあるページをループに追加したいため、使用できませんでした。どちらのタイマーも私の状況では扱いにくいため、良い解決策ではありません。
したがって、ユーザーはこのソリューション(スレッドを使用するソリューション)を使用することを提案しています。私はそれが問題なく動作すると思っていましたが、ループに入れると(ループの)最後の要素だけを取り、すべて同じ要素で X スレッドを作成することに気付きました。
より良い説明のために:私はこれを持っていますList<Urls> url ;
このクラスで
public class Urls {
public string Host { get; set; }
public String url { get; set; }
}
単純な Foreach 内にそのコードを追加すると、スレッドがすべてループの最後の要素を使用し始める理由がわかりません。
List が正しいかどうかは既に確認しており、スレッドコードの前に現在のオブジェクトを表示する MessageBox を追加しており、適切に変更されています。