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值。
以上就是本文的全體內容,願望年夜家愛好。