У меня проблема с этим кодом в 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.
Я могу использовать спящий поток, в то время как (withDatetime) или аналогичный, потому что внутри WinAPP есть браузер WebControl, и я хотел бы добавить некоторую страницу в цикл с некоторым временем задержки без остановки интерфейса.Ни один из таймеров не является хорошим решением, потому что с ним трудно справиться в моей ситуации.
Поэтому пользователь предлагает мне использовать это решение (те, что с Thread).Я думал, что это работает без проблем , но только теперь я понимаю, что если я включу в свой цикл, он возьмет только последний элемент (цикла) и создаст все потоки X с одним и тем же элементом.
Для лучшего объяснения: у меня есть это List<Urls> url ;
с этим классом
public class Urls {
public string Host { get; set; }
public String url { get; set; }
}
Теперь я не могу понять, почему, если я добавляю этот код в простой Foreach, когда все потоки начинают использоватьпоследний элемент цикла.
Я уже проверил правильность списка, добавив MessageBox для отображения текущего объекта перед кодом потока, и он изменился правильно.