- 相關(guān)推薦
關(guān)于Winform多線程方式登錄代碼
為了方便大家學(xué)習(xí)相關(guān)的知識(shí),YJBYS小編下面為你整理了關(guān)于Winform多線程方式登錄代碼,希望對(duì)你有所幫助。
bool restart = true;
while (restart)
{
Start(out restart);
}
(1):在主進(jìn)程中不停的調(diào)用start.
void Start(out bool restart)
{
bool connected = false;
restart = false;
string[] userInfo = null;
try
{
//打開LoginInfoForm窗體,返回用戶名密碼。
userInfo = GetLoginInfo();// Splasher.GetLoginInfo();
if (userInfo == null)
{
loginOK = false;
return;
}
//啟動(dòng)登陸后臺(tái)線程。LoginProcessForm窗體啟動(dòng)MySplashThread啟動(dòng)不停的打開LoginProcessForm窗體。
Splasher.Show();
}
catch (Exception err)
{
DebugHelper.Write(err);
Splasher.ShowDialog("錄入登錄信息發(fā)生異常,請(qǐng)和管理員聯(lián)系", MessageTipType.Error);
return;
}
eProcessState previousStepResult = eProcessState.Complete;
while (Splasher.StartExecute())
{
try
{
switch (Splasher.CurrentStep)
{
case eLoginState.__:
case eLoginState.__:
case eLoginState.__:
case eLoginState.__:
}
previousStepResult = eProcessState.Complete;
//結(jié)束執(zhí)行
Splasher.EndExecute(previousStepResult);
}
catch (Exception error)
{
//略
}
}
}
//start中的對(duì)過(guò)程的控制。
static public void Show()
{
try
{
//當(dāng)?shù)诙握{(diào)用的時(shí)候MySplashThread != null了這個(gè)時(shí)候
if (MySplashThread != null)
{
// public void Reset()
//{
// progressView.Reset();
//currentItemIndex = 0;
//}
//相當(dāng)于觸發(fā)MySplashForm.Reset事件。
MySplashForm.Invoke(new MethodInvoker(MySplashForm.Reset));
//將窗體顯示出來(lái)。
MySplashForm.Invoke(new MethodInvoker(MySplashForm.Show));
return;
}
//當(dāng)?shù)谝淮蔚臅r(shí)候調(diào)用構(gòu)造函數(shù)構(gòu)造出窗體。構(gòu)造出來(lái)以后myResetEvent.Set();通知
if (MySplashForm == null)
{
MySplashForm = new LoginProcessForm(myResetEvent);
}
//這里只是每次都調(diào)用Application.Run(MySplashForm);作用相當(dāng)于建立起信息循環(huán)隊(duì)列
MySplashThread = new Thread(new ThreadStart(Splasher.ShowThread));
MySplashThread.IsBackground = true;
MySplashThread.SetApartmentState(ApartmentState.STA);
MySplashThread.Start();
//等待直到myResetEvent.Set();
myResetEvent.WaitOne(5000);
}
catch (Exception err)
{
DebugHelper.Write(err);
}
}
//構(gòu)造函數(shù)。
public LoginProcessForm(AutoResetEvent autoreset)
{
myResetEvent = autoreset;
Renderer = new SkinFormLoginFormRender();
InitializeComponent();
//this.TopMost = true;
//this.CloseBox = true;
CanMoveWindow = false;
labelVersion.Text = "Version:" + AssemblyInfoHelper.AssemblyFileVersion;
this.Load += new EventHandler(LoginProcessForm_Load);
}
delegate void EndExecuteCallback(eProcessState previousProcessResult);
static public void EndExecute(eProcessState previousProcessResult)
{
//winform中子線程不能更新主線程的控件。所以MySplashForm.InvokeRequired代表是否需要更新主線程控件。
//如果需要更新的話MySplashForm.Invoke
if (MySplashForm.InvokeRequired)
{
//回調(diào)會(huì)繼續(xù)執(zhí)行previousProcessResult,等下次的時(shí)候就會(huì)到下面去執(zhí)行了。
MySplashForm.Invoke(new EndExecuteCallback(EndExecute), previousProcessResult);
}
else
{
//如果
MySplashForm.EndExecute(previousProcessResult);
}
}
///
/// 進(jìn)入下一過(guò)程
///
///
///
public void EndExecute(eProcessState previousProcessResult)
{
//progressView為我們使用的用戶控件
progressView.SetTip(processItems[currentItemIndex], previousProcessResult);
currentItemIndex++;
}
//關(guān)閉代碼
static public void Close()
{
try
{
if (MySplashThread == null) return;
if (MySplashForm == null) return;
try
{
MySplashForm.Invoke(new MethodInvoker(MySplashForm.Close));
}
catch (Exception err)
{
DebugHelper.Write(err);
}
MySplashThread.Abort();
}
catch (Exception err)
{
DebugHelper.Write(err);
}
finally
{
MySplashThread = null;
MySplashForm = null;
}
}
【W(wǎng)inform多線程方式登錄代碼】相關(guān)文章:
顯示jquery代碼的四種方式06-26
PHP Curl多線程原理詳解09-11
HTML的代碼注釋10-07
過(guò)濾HTML代碼08-29
關(guān)于MyEclipse代碼提示設(shè)置包括html和jsp的代碼09-25
java多線程面試題201710-03
asp緩存類代碼09-28
關(guān)于AJAX類代碼09-19
PHP代碼優(yōu)化技巧09-24