WatiN을 사용하여 웹 사이트를 구문 분석합니다. 그 과정을 시작하는 버튼이 있습니다. 브라우저 창을 열고 이동해야하는 곳으로 이동 한 다음 DoWork
이라는 메서드를 호출하는 새 작업을 만듭니다.C# 도움말 작업 클래스
DoWork
끝에 새 메서드를 호출하면이 새로운 메서드를 호출하지 않으면 프로그램에서 내 웹 사이트를 탐색하려고 할 때 이상한 결과가 나타납니다. DoWork
그리고 버튼을 클릭하여 새 메서드를 연결하면됩니다. 그래서 내 질문은 제대로 배경 프로세스 메서드에서 새 메서드를 호출하지 오전, Dowork
?
코드 :
IE browser = new IE("http://www.mywebsite.com/");
string startYear;
string endYear;
int NumRows;
Task myThread;
public Form1()
{
InitializeComponent();
}
private void Start_Click(object sender, EventArgs e)
{
startYear = txtStartYear.Text;
endYear = txtEndYear.Text;
//website navigation work removed for brevity
browser.Button(Find.ById("ContentPlaceHolder1_btnApplyFilter")).Click();
int numRows = browser.Div(Find.ById("scroller1")).Table(Find.First()).TableRows.Count -1;
NumRows = numRows;
lblTotalRows.Text = numRows.ToString();
myThread = Task.Factory.StartNew(() => DoWork());
}
public void DoWork()
{
List<string> myList = new List<string>(NumRows);
txtStartYear.Text = startYear;
txtEndYear.Text = endYear;
for (int i = 1; i < NumRows; i++)
{
TableRow newTable = browser.Div(Find.ById("scroller1")).Table(Find.First()).TableRows[i];
string coll = string.Format("{0},{1},{2},{3},{4}", newTable.TableCells[0].Text, newTable.TableCells[1].Text, newTable.TableCells[2].Text, newTable.TableCells[3].Text, newTable.TableCells[4].Text);
myList.Add(coll);
label1.Invoke((MethodInvoker)delegate
{
label1.Text = i.ToString();
});
}
//database work removed for brevity.
browser.Button(Find.ById("btnFilter")).Click();
newMethod();
}
public void newMethod()
{
int start = int.Parse(startYear);
start++;
startYear = start.ToString();
int end = int.Parse(endYear);
end++;
endYear = end.ToString();
browser.SelectList(Find.ById("selStartYear")).SelectByValue(startYear);
browser.SelectList(Find.ById("selEndYear")).SelectByValue(endYear);
//removed for brevity
}
}
내가 선 browser.SelectList(Find.ById("selStartYear")).SelectByValue(startYear)
가 제대로 작동하지 않는 Dowork
에서 newMethod
를 호출하는 경우, 반복,하지만 난 Dowork
에서 newMethod
에 대한 호출을 제거하고 경우 단지 버튼 그것까지 newMethod
후크 잘 작동합니다. 그것이 배경 작업이 DoWork
과 관련이 있는지 궁금하네요?
올바르게 동작하지 않는다고 말하면 드롭 다운 목록에서 항목을 선택하면 페이지 자동 게시가 다시 시작되지만 위의 코드 줄에서는 선택되지만 페이지는 다시 게시되지 않습니다. 가능해서는 안됩니다. DoWork
안에 메서드를 호출하지 않으면이 문제가 발생하지 않습니다.
sokyo soooo much ... 그래서 처음부터 ui 요소를 수정하지 않았다면 여전히 newMethod를 호출해야합니까? –
@Nick : 특정 스레드에 있어야하는 다른 작업을 수행하지 않는다고 가정하면 괜찮습니다. –
답을 편집하고 마지막 비트를 추가해 주셔서 감사합니다. 또한 브라우저를 사용해 보았지만 작동하지 않습니다. 그것은 WatiN core를 말합니다 .IE에는 Invoke에 대한 정의가 없으므로 답변이 있습니다. –