62,074
社区成员
发帖
与我相关
我的任务
分享
private void btn_SimulationClick_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(ExecuteFormTask));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
public void ExecuteFormTask()
{
foreach(DataGridViewRow row in this.taskList.SelectedRows) //winform有一个Gridview列表,显示任务
{
string taskid = row.Cells[11].Value.ToString();
this.Invoke(new DelegateExecuteOneTaskByTaskId(ExecuteOneTaskByTaskId), new Object[] { taskid });
}
}
public delegate void DelegateExecuteOneTaskByTaskId(string taskId);
public void ExecuteOneTaskByTaskId(string taskId)
{
//this.Invoke(new LoadExcuting(InitExcuteTask), new Object[] { taskId });
for (int i = 0; i < ProxyIpTable.Rows.Count; i++)
{
string sql = "select * from [task] where [task_id]=" + taskId;
DataTable dt = PPTech.ESP.DataProvider.ExecuteSql.FetchDataTable(sql);//查询该记录信息
string mainKey = dt.Rows[0]["kw_center"].ToString();
string aboutKey = dt.Rows[0]["kw_end"].ToString();
string ipHost = ProxyIpTable.Rows[i]["HostIP"].ToString() + ":" + ProxyIpTable.Rows[i]["Port"].ToString();//读取IP地址
DateTime dtm = DateTime.Now;
while (DateTime.Now.Subtract(dtm).TotalSeconds < 3) //停顿3秒
{
Application.DoEvents();
}
//lock (this) //考虑到线程同时执行一个函数,不知道lock是否该用到此处???
//{
WebBrowser webbr = new WebBrowser();
RefreshIESettings(ipHost);//设置代理IP
webbr.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webRequsted);
webbr.Navigate("http://www.xx.com/req.aspx?bs=" + getURLEncode(mainKey) + "&wd=" + getURLEncode(aboutKey) + "&taskid=" + taskId);
this.Invoke(new Tab_ItemContent_Add(UpdateTabItemContent), new Object[] { taskId, mainKey });//去即时更新winform,显示"正在执行……"
//}
}
}
//-------------以下都是委托-------------
public delegate void LoadExcuting(string taskId);
public void InitExcuteTask(string taskId)
{
this.tb_item_con1.Text = "正在初始化任务:" + GetTaskNameByTaskId(taskId) + ",请稍后……\r\n";
}
public void webRequsted(object sender, WebBrowserDocumentCompletedEventArgs e)//文档加载完后委托
{
WebBrowser webb = (WebBrowser)sender;
string requestUrl = webb.Url.ToString();
string taskId = Regex.Split(requestUrl, "taskid=", RegexOptions.IgnoreCase)[1].ToString();
UpdateTaskReflashCount(taskId);//完成请求刷新数据库
this.Invoke(new Tab_ItemContent_Loaded_addInfo(UpdateTabItemContent), new Object[] { taskId });//即时更新winform,显示"完成……"
}
public delegate void Tab_ItemContent_Loaded_addInfo(string taskid);//执行任务成功,委托更新tb_item_con1信息
public void UpdateTabItemContent(string taskid)
{
this.tb_item_con1.AppendText("执行任务" + GetTaskNameByTaskId(taskid) + ",成功!\r\n");
this.tb_item_con1.SelectionStart = tb_item_con1.Text.Length;
this.tb_item_con1.ScrollToCaret();
}
public delegate void Tab_ItemContent_Add(string taskId, string mainKey); //委托,更新Tab_item_con1,显示正在刷新信息……
public void UpdateTabItemContent(string taskId, string mainKey)
{
this.tb_item_con1.Text += "正执行任务" + GetTaskNameByTaskId(taskId) + ",准备刷新关键词\"" + mainKey + "\"1次,请稍后……\r\n";
this.tb_item_con1.SelectionStart = tb_item_con1.Text.Length;
this.tb_item_con1.ScrollToCaret();
}
System.Net.WebClient wc = new WebClient();
WebProxy wproxy = new WebProxy(ProxyIpTable.Rows[i]["HostIP"].ToString(), int.Parse(ProxyIpTable.Rows[i]["Port"].ToString()));
wc.DownloadData(url);
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(webRequsted);
System.Net.WebClient wc = new System.Net.WebClient();
Byte[] pageData = wc.DownloadData("网页地址");
string s= System.Text.Encoding.Default.GetString(pageData);