2024年7月30日 星期二

vb.net 背景執行

 背景執行+回報進度+顯示進度條+中斷程序

使用 BackgroundWorker 再次上傳


VB.net Thread 執行序

 引用來源:VB.net Thread執行序簡單應用


建立一個Class用來執行新的Thread:

Imports System.Threading


Namespace Classes

Public Class Worker

Delegate Sub WorkerDelegate(ByVal Params As Object)

Private m_Thread As Thread = Nothing

Private m_Controler As Control = Nothing

Private m_Params As Object = Nothing

Public Event WorkerToDo(ByRef Params As Object)

Public Event WorkerInvoke(ByVal Params As Object)

Dim CallBackInvoke As New WorkerDelegate(AddressOf Worker_Invoke)


Public Sub New(ByVal ctrl As Control)

m_Controler = ctrl

End Sub


Public Sub Start()

Dim ThreadBegin As New ThreadStart(AddressOf Worker_ToDo)

Me.m_Thread = New Thread(ThreadBegin)

Me.m_Thread.IsBackground = True

Me.m_Thread.Name = "WorkerThread" + Now.ToShortTimeString()

Me.m_Thread.Start()

End Sub


Private Sub Worker_ToDo()

RaiseEvent WorkerToDo(m_Params)

m_Controler.Invoke(CallBackInvoke, m_Params)

End Sub


Private Sub Worker_Invoke(ByVal Params As Object)

RaiseEvent WorkerInvoke(Params)

End Sub

End Class

End Namespace


使用方式:

Private Sub LoadData()

Dim wk As New Worker(Me)

Try

'連結要丟到背景工作的副程式

AddHandler wk.WorkerToDo, AddressOf DoQueryDataBase

'工作完畢後, 所要處理資料(與UI互動)

AddHandler wk.WorkerInvoke, AddressOf BindData

wk.Start()

Finally

wk = Nothing

End Try

End Sub


Private Sub DoQueryDataBase(ByRef Params As Object)

'執行的程式, 結果可由 Params 代傳

'1: Params = modADO.Query(...)

'2: Params = New Object() {data1, data2, ...}

End Sub


Private Sub BindData(ByVal Params As Object)

'背景工作完畢後, 與 UI 互動

TextBox1.Text = CInt(Params)

End Sub

2024年6月1日 星期六

使用 Knockout.js 建立動態 UI

 使用 Knockout.js 建立動態 UI

---

Introduction to Knockout.js and CRUD Operations in ASP.Net Web Forms Using Knockout.JS

knockout.js-初體驗

Knockstrap


使用 ASP.NET Web API 建置 RESTful API

 使用 ASP.NET Web API 建置 RESTful API

---


理財工程師 Mars 運用工程師能力創造財富自由人生

 理財工程師 Mars 運用工程師能力創造財富自由人生

--

不錯!  

運用工程師能力創造財富自由人生


ASP.Net 的Cookie簡介及用法

 ASP.Net 的Cookie簡介及用法


Cookie(餅乾)是一個在網頁應用程式上拿來儲存瀏覽者資料的做法之一‧ 例如,當一個瀏覽者參觀您的網站時,您就可用Cookie把對方的一些資料儲存起來,並且下一次再使用‧ 另外,如果您有學習過ASP, PHP這類語言的話,相信Cookie對你絕對不陌生‧ 假設您是學習VB, C++的設計師的話,用Cookie就好比是寫資料到使用者的Registry裡一樣‧ 只是用Cookie比較簡單,而且對初學者而言,Cookie也比Registry還容易瞭解!


Cookie事實上是以純文字方式儲存在使用者電腦某資料夾裡面的,以Microsoft Windows NT (2000, XP)的使用者來說,每一個使用者都有一個自己個人的資料夾來放Cookie檔案,而這資料夾通常都會在『C:\Documents and Settings\使用者\Cookies\』這邊‧ 每一個Cookie都儲存著每一個不同網站所存的資料,而每一項所擁有的資料都會不同,這會看網站程式編寫者而定‧ 有時候Cookie會儲存您在某一網站的帳號或密碼、會員身份、登入/登出日期等等‧ 甚至Cookie也可以拿來做是防治瀏覽者重覆投票的防範方法之一!


在使用Cookie上,注意cookie使用也是有一些限制的! 例如一般瀏覽器至少都會支援4096 Bytes的Cookie,允許20個(各網站‧如果您嘗試使用超過更多的Cookie,那麼小心舊的Cookie就會莫名其妙消失!),也許看起來很少,不過基本上卻已經足夠儲存你純文字的資料了! 另外也有一些瀏覽器會有只允許儲存共300 Cookies的限制(所有網站的加起來)‧ 還有,每一個Cookie都會有它的存活時間! 基本上來說,Cookie除了靠網站程式結束外,如果您自己關閉了瀏覽器,那麼Cookie也會自動消失‧ 不過值得慶幸的是您可以自由的設定Cookie的過期時間,這我將會說明!


『筆記:剛才提到了Cookie是儲存在瀏覽者電腦裡面的,所以身為網頁程式編寫者的您,也必須留意到瀏覽者也是會隨意的刪除或想辦法亂修改的! 有時太過相信Cookie的資料內容的話,也可能會導致一些人為問題喔!』



用ASP.Net 寫入一個Cookie資料



假設您是純ASP (Active Server Pages)的學習者,也許在剛開始接觸ASP.Net時可能會有點不習慣! 以Cookie做例子,要閱讀或寫Cookie絕對不是像ASP這樣:


閱讀Cookie資料(ASP):

Dim mycookie : mycookie = Request.Cookies("eat_cookie")


寫入Cookie資料(ASP):

Response.Cookies("eat_cookie") = "C is a cookie!"


在ASP.Net,跟ASP一樣,要寫Cookie都會要使用Response property,要讀用Request‧ 就先講寫入Cookie吧! 如果您想要建立一個Cookie資料,您可以創造單一個Cookie,或在同一時間建多重也是可以(Sub Cookies)‧ 單一的話:

Response.Cookies("mycookie").Value = "C is a cookie!"


要建立一個Sub cookie的話:

Response.Cookies("mycookie")("flavor") = "Coffee"


剛才我有提到Cookie過期的話題,如果要另外加長的話,那麼(假設存活時間設一年):


Response.Cookies("mycookie").Value = "C is a cookie"

Response.Cookies("mycookie").Expires = DateTime.Now().AddDays(365)


註:用Sub cookie也是用類似的方法來設定存活時間


假如我的網站有Sub domain的話,您也可以設定Domain property來分享Cookie:

(例如我的網站叫www.tekcyberspace.com,然後我有一個Sub domain叫forum.tekcyberspace.com)

Response.Cookies("mycookie").Value = "C is a cookie"

Response.Cookies("mycookie").Expires = DateTime.Now().AddDays(365)

Response.Cookies("mycookie").Domain = "forum.tekcyberspace.com"



閱讀Cookie資料



讀Cookie就比較簡單了‧ 我就直接講吧! 假設要讀單一Cookie的話:

Dim get_mycookie As HTTPCookie = Request.Cookies("mycookie")


寫出一個Cookie資料:

Dim get_mycookie As HTTPCookie = Request.Cookies("mycookie")

If Not get_mycookie Is Nothing Then

Response.Write(get_mycookie.Value)

End If

注意如果沒有Cookie在的話,你接受到的會是 Nothing‧


讀取並寫出Sub cookie資料:

Dim get_mycookie As String = Request.Cookies("my_cookie")("flavor")

If not get_mycookie = "" Then

Response.Write(get_mycookie)

End If


Cookie怎麼寫就怎麼讀

  Cookie怎麼寫就怎麼讀


using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;


public partial class B : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        if (!IsPostBack)

        {

            //產生一個Cookie

            HttpCookie cookie = new HttpCookie("test");

            //設定單值

            cookie.Value = Server.UrlEncode("Hello!!世界");

            //設定過期日

            cookie.Expires = DateTime.Now.AddDays(2);

            //寫到用戶端

            Response.Cookies.Add(cookie);


        }

    }



    //讀取cookie(以多值的方式)

    protected void btn_test_Click(object sender, EventArgs e)

    {

        HttpCookie cookie = Request.Cookies["test"];

        foreach (string value in cookie.Values)

        {

            Response.Write("Null?"+(value==null)+"<br/>");/*順便測試看看是否為null還是空字串*/

            Response.Write("空字串?"+(value=="")+"<br/>");

            Response.Write("foreach迴圈中撈出Request.Cookies['test']所有的Value:" + Server.UrlDecode(value)+"<hr/>");

        }


        Response.Write("Null?"+(cookie["test"]==null)+"<br/>");

        Response.Write("空字串?" + (cookie["test"]=="")+"<br/>");

        Response.Write("cookie['test'](HttpCookie物件裡索引名為test的值):"+Server.UrlDecode(cookie["test"])+"<hr/>");

    }

}


2024年5月6日 星期一

vbnet TLS1.2

 Using TLS1.2 in .Net 2.0, .Net 3.0, .Net 3.5 and .Net 4.0

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load

    If Not Me.IsPostBack Then

        ServicePointManager.Expect100Continue = True

        ServicePointManager.SecurityProtocol = CType(3072, SecurityProtocolType)

        Dim json As String = (New WebClient).DownloadString("https://raw.githubusercontent.com/aspsnippets/test/master/Customers.json")

        Response.Write(json)

    End If

End Sub