Der gesamte Code unten nur zum Erstellen von zwei Prozessen. Während ich n Prozess erstellen muss, um den Chrome-Browser zu öffnen und OpenNRowsInData(user, pwd)
basierend auf dtUser.Rows.Count
auszuführen, weil dies dynamisch ist.Wie n Objektbasis auf DataTable.Rows.Count in C# erstellen?
Und ich weiß nicht warum OpenNRowsInData(user, pwd);
immer nur die ersten Zeilen bekommen.
Ich habe einen DataTable
Bereich von 1-7 Zeilen.
Normalerweise verwendete ich normalerweise, um zwei Objekte zu erstellen.
static myObject[] browser = new myObject[] {
new myObject(Browsers.Chrome, 0),
new myObject(Browsers.Chrome, 0)
};
Thread t1, t2;
t1 = new Thread(new ThreadStart(AllCase))
{
Name = "Thread1"
};
t1.Start();
t2 = new Thread(new ThreadStart(AllCase))
{
Name = "Thread2"
};
t2.Start();
In der Klasse AllCase
:
static int[] stepRun = { 0, 0 };
private void AllCase()
{
int idx = int.Parse(Thread.CurrentThread.Name.Replace("Thread", "")) - 1;
switch (stepRun[idx])
{
case 0:
foreach (DataRow row in dtUser.Rows)
{
user = row["user"].ToString();
pwd = row["pwd"].ToString();
OpenNRowsInData(user, pwd);
}
break;
case 1:
ClickBuy();
break;
}
}
Und in einem anderen, bevor ich parallel Prozess. Derzeit möchte ich es nicht verwenden.
Parallel.ForEach(
dtUser.AsEnumerable(),
items => OpenNRowsInData(items["user"].ToString(), items["pwd"].ToString()));
Ich möchte nur Spalten user
und pwd
erhalten.
Mit Code versucht, ich habe versucht, einen Parameter in action()
Methode wie: action(string user, string pwd)
hinzuzufügen.
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
if (source == null) throw new ArgumentNullException("source");
if (action == null) throw new ArgumentNullException("action");
foreach (T item in source)
{
action(item);
}
}
Aktualisiert:
hinzufügen Klasse OpenNRowsInData(string username, string password)
:
private void OpenNRowsInData(string username, string password)
{
int idx = int.Parse(Thread.CurrentThread.Name.Replace("Thread", "")) - 1;
try
{
browser[idx].DeleteAllCookies();
browser[idx].GoToUrl(link);
browser[idx].waittingID("txtUserName", 15);
browser[idx].FindElementById("txtUserName").SendKeys(username);
browser[idx].FindElementById("txtpassword").SendKeys(password);
browser[idx].FindElementById("btnlogin").Click();
stepRun[idx] = 1;
AllCase();
}
}
könnten Sie die Implementierung von 'OpenNRowsInData()'? –
Ihre Frage ist, warum 'OpenNRowsInData (user, pwd); 'immer nur die ersten Zeilen bekommt ..? =! Nur zur Verdeutlichung: In 'dtUser.Rows' haben Sie 7 Zeilen, also 7 Benutzer und Sie möchten sich anmelden. Wenn Sie in 'AllCase' die foreach-Schleife durchlaufen, ergeben sich die richtigen' user'- und 'pwd'-Werte? –
beendet die Schleife nach der ersten Iteration? oder gibt es dir 7 mal die selbe Reihe? –