C#完成線程池的簡略示例。本站提示廣大學習愛好者:(C#完成線程池的簡略示例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#完成線程池的簡略示例正文
本文以實例演示了C#線程池的簡略完成辦法。法式中界說了一個對象類,用以包裝參數,完成多個參數的傳遞。成員屬性包含兩個輸出參數和一個輸入參數。代碼簡略易懂,備有正文便於懂得。
詳細完成代碼以下:
using System;
using System.Threading;
//界說對象類,用以包裝參數,完成多個參數的傳遞
class Packet
{
//成員屬性包含兩個輸出參數和一個輸入參數
protected internal String inval1;
protected internal String inval2;
protected internal String outval;
}
class ThreadPoolExam
{
//界說履行雷同內容的兩個辦法
public void Task1(object Obj)
{
//聲明Packet類對象,用以傳遞參數
Packet PacketObj;
PacketObj = (Packet)Obj;
Console.WriteLine("義務一中的第一個輸出參數:" + PacketObj.inval1);
Console.WriteLine("義務一中的第二個輸出參數:" + PacketObj.inval2);
//為輸入參數賦值
PacketObj.outval = PacketObj.inval1 + " " + PacketObj.inval2;
}
public void Task2(object Obj)
{
Packet PacketObj;
PacketObj = (Packet)Obj;
Console.WriteLine("義務二中的第一個輸出參數:" + PacketObj.inval1);
Console.WriteLine("義務二中的第二個輸出參數:" + PacketObj.inval2);
PacketObj.outval = PacketObj.inval1 + " " + PacketObj.inval2;
}
static void Main()
{
//聲明兩個Packet對象,並為輸出參數賦值
Packet PacketObj1 = new Packet();
Packet PacketObj2 = new Packet();
PacketObj1.inval1 = "Task 1 - 1";
PacketObj1.inval2 = "Task 1 - 2";
PacketObj2.inval1 = "Task 2 - 1";
PacketObj2.inval2 = "Task 2 - 2";
ThreadPoolExam tps = new ThreadPoolExam();
//將辦法放入線程池的隊列中
ThreadPool.QueueUserWorkItem(new WaitCallback(tps.Task1), PacketObj1);
ThreadPool.QueueUserWorkItem(new WaitCallback(tps.Task2), PacketObj2);
Console.ReadLine();
}
}
if (!TextUtils.isEmpty(username)) {
LogUtils.e("received from js. username = " + username);
this.mUsername = username;
checkData(mUsername, mPasswrod);
}
}
}
webview.addJavascriptInterface(new JavaScriptInterface(), "android");
private void getHtml() {
webview.loadUrl("javascript:window.android.getHTML('<html>'+document.body.innerHTML+'</html>');");
}
那末上面這句話履行完的成果將會前往到JavaScriptInterface中getHTML辦法外面。也就是說經由過程綁定,js代碼挪用了java代碼,並將全部html作為前往值前往,履行的是saveWebViewUserData.saveUserDataWebView(webview, html);
獲得了包括class的html以後,就須要順次剖析了,平日來講,普通輸出帳號暗碼的頁面都含有 type=”password” 字樣。先斷定這個html頁面能否含有這個字樣,假如有,那末能夠就是登錄頁面。
再斷定這個頁面的id,或許是classname能否包括password啦,pwd啦,或許甚麼其他和暗碼有關的了,這個元素確定就是暗碼框了,再過濾失落頁面中其他的button,hidden,submit,checkbox等等,剩下的那一個確定就是用戶名了;過濾代碼以下:(這裡應用jsoup解析html獲得各個document,輪回遍歷剔除不須要的元素)
public void saveUserDataWebView(WebView webView, String html) {
Document document = Jsoup.parse(html);
Elements elements = document.select("input");
boolean isContainsPassword = false;
for (Element element : elements) {
String type = element.attr("type");
if ("password".equals(type)) {
isContainsPassword = true;
break;
}
}
if (!isContainsPassword) {
return;
}
for (Element element : elements) {
String className = element.className();
String type = element.attr("type");
webView.post(new Runnable() {
@Override
public void run() {
LogUtils.e("this element id is = " + element.attr("id") + " type = " + type);
String id = element.attr("id");
if (filterData(type, id)) {
int handType = handleType(type);
if (handType == NONE) {
handType = handleId(id);
if (handType == NONE) {
handleClassName(className);
}
}
switch (handType) {
case PASSWORD:
if (id==null){
}else {
savePasswordById(id, webView);
}
break;
case USERNAME:
if (id==null){
}else {
saveUsernameById(id, webView);
}
break;
case NONE:
break;
}
}
}
});
}
}
private int handleClassName(String className) {
if (className == null) {
return ERROR;
}
if (className.contains("password")) {
return PASSWORD;
}
if (className.contains("captcha")) {
return ERROR;
}
return USERNAME;
}
private boolean filterData(String type, String id) {
if ("captcha".equals(type)) {
return false;
} else if ("login_vcode".equals(type)) {
return false;
} else if ("button".equals(type)) {
return false;
} else if ("hidden".equals(type)) {
return false;
} else if ("submit".equals(type)) {
return false;
} else if ("checkbox".equals(type)) {
return false;
} else if ("captcha".equals(id)) {
return false;
} else if ("inp_ChkCode".equals(id)) {
return false;
} else {
return true;
}
}
private int handleId(String id) {
if (id == null) {
return NONE;
}
if (id.contains("captcha")) {
return ERROR;
}
if (id.contains("password")) {
return PASSWORD;
}
if (id.contains("Phone")) {
return USERNAME;
}
if (id.contains("username")) {
return USERNAME;
}
if (id.contains("code")) {
return ERROR;
}
return USERNAME;
}
private int handleType(String type) {
if (type == null) {
return NONE;
}
if (type.contains("tel")) {
return ERROR;
}
if (type.contains("pwd")) {
return PASSWORD;
}
if (type.contains("password")) {
return PASSWORD;
}
return NONE;
}
將他們倆的class id記載上去,再次經由過程js代碼獲得到頁面的value值,挪用java代碼保留上去。代碼以下:
private void saveUsernameById(String id, WebView webView) {
webView.loadUrl("javascript:window.android.save_username(document.getElementById('" + id + "').value)");
}
private void savePasswordById(String id, WebView webView) {
webView.loadUrl("javascript:window.android.save_password(document.getElementById('" + id + "').value)");
}
經由下面簡略的處置,曾經年夜致可以獲得到用戶輸出的帳號暗碼了,經由測試,簡略的頁面中的帳號暗碼是可以獲得到的,其他龐雜的(如暗碼在轉跳時清空了,又傳值到其他處所停止運算的)須要再依據分歧的計劃來對於了。
轉跳前先獲得全部頁面的html,用jsoup獲得頁面的一切class name,遍歷各個節點,剔除無用內容(驗證碼按鈕等),斷定暗碼框在哪,剩下的能夠就是帳號了,履行js代碼獲得value值。
以上就是本文的全體內容,願望年夜家愛好。