不要讓SQL報錯再返回,你使用存儲過程先判斷表里是不是有這行插入的資料的項,如果有,就返回一個提示即可。
成都創(chuàng)新互聯(lián)公司專注于海棠企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城系統(tǒng)網(wǎng)站開發(fā)。海棠網(wǎng)站建設(shè)公司,為海棠等地區(qū)提供建站服務(wù)。全流程按需定制網(wǎng)站,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
你要先把
VB.net
畫線的函數(shù)學(xué)會了,再來編程,你可以先試試正弦函數(shù)繪圖的編程。
程序的意思就是2個按鈕,一個開始,一個停止。點開始按鈕,程序拋出一個線程,計算2個GUID的值并在Label上顯示,點停止線程結(jié)束。
namespace GUIDTEST
{
public partial class Form1 : Form
{
Thread t;
public Form1()
{
InitializeComponent();
t = new Thread(new ThreadStart(GuidProc));
}
private void button2_Click(object sender, EventArgs e)
{
t.Suspend();
}
private void button1_Click(object sender, EventArgs e)
{
t.Start();
}
public void GuidProc()
{
int i = 0;
while (true)
{
string s1 = Guid.NewGuid().ToString();
label4.Text = s1;
label4.Refresh();
string s2 = Guid.NewGuid().ToString();
label5.Text = s2;
label5.Refresh();
i++;
label6.Text = i.ToString();
}
}
}
}
調(diào)試失敗。
vb.net中如何結(jié)束一個線程
一般而言,如果您想終止一個線程,您可以使用System.Threading.Thread類的Abort方法. 例如:
Dim worker As ThreadStart = New ThreadStart(AddressOf workerthreadmethod)
Dim t As Thread = New Thread(worker)
t.Start()
MessageBox.Show("Wait for a while for the thread to start.")
MessageBox.Show(t.ThreadState.ToString())
t.Abort()
MessageBox.Show(t.ThreadState.ToString())
t.Join()
MessageBox.Show(t.ThreadState.ToString())
當(dāng)然,在調(diào)用Abort方法后,線程并不是立刻終止,要等線程的所有finally快中的代碼完成后才會完全終止. 所以在主線程中可以用Join方法來同步,當(dāng)線程還未完全終止時,t.Join()將處于等待,直到t線程完全結(jié)束后再繼續(xù)執(zhí)行后面的語句。
Abort方法是會導(dǎo)致線程跳出一個異常錯誤的,你需要在代碼中捕獲該異常。下面是一個比較完整的VB.NET線程例子:
Imports System
Imports System.Threading
Public Class MyTestApp
Public Shared Sub Main()
Dim t As New Thread(New ThreadStart(AddressOf MyThreadMethod))
'Start the thread
t.Start()
MsgBox("Are you ready to kill the thread?")
'Kill the child thread and this will cause the thread raise an exception
t.Abort()
' Wait for the thread to exit
t.Join()
MsgBox("The secondary thread has terminated.")
End Sub
Shared Sub MyThreadMethod()
Dim i As Integer
Try
Do While True
Thread.CurrentThread.Sleep(1000)
Console.WriteLine("This is the secondary thread running.")
Loop
Catch e As ThreadAbortException
MsgBox("This thread is going to be terminated by the Abort method in the Main function")
End Try
End Sub
End Class
Thread.Abort()方法用來永久銷毀一個線程,而且將拋出ThreadAbortException異常。使終結(jié)的線程可以捕獲到異常但是很難控制恢復(fù),僅有的辦法是調(diào)用Thread.ResetAbort()來取消剛才的調(diào)用,而且只有當(dāng)這個異常是由于被調(diào)用線程引起的異常。因此,A線程可以正確的使用Thread.Abort()方法作用于B線程,但是B線程卻不能調(diào)用Thread.ResetAbort()來取消Thread.Abort()操作。
我告訴你思路,你自己去實現(xiàn)。
建議你用“守護線程”的方式去做,這樣做對于你一個小任務(wù)來說更合適。首先,你要建立一個隊列,將所有下載任務(wù)放入隊列。注意,這個隊列必須是“線程安全”的,即兩個線程不會搶到同一個任務(wù)。然后只開10個線程。這些線程會從隊列中讀取任務(wù)。當(dāng)一個線程不能再從隊列中讀取任務(wù)時,也就是隊列為空時,退出。等所有線程都退出后,你的程序就結(jié)束了。
還有一種方法,叫“線程池”,也就是你說的方法,稍微復(fù)雜一點:
指定一個變量,用來表示線程的數(shù)量。剛開始為0,每開一個線程+1。當(dāng)一個線程完成任務(wù)退出后,這個變量-1。直到所有任務(wù)都完成后,不再產(chǎn)生新線程。