當前位置:才華齋>IT認證>ACCP>

關於Winform多線程方式登錄代碼

ACCP 閲讀(2.66W)

為了方便大家學習相關的知識,YJBYS小編下面為你整理了關於Winform多線程方式登錄代碼,希望對你有所幫助。

關於Winform多線程方式登錄代碼

bool restart = true;

while (restart)

{

Start(out restart);

}

(1):在主進程中不停的調用start.

void Start(out bool restart)

{

bool connected = false;

restart = false;

string[] userInfo = null;

try

{

//打開LoginInfoForm窗體,返回用户名密碼。

userInfo = GetLoginInfo();// oginInfo();

if (userInfo == null)

{

loginOK = false;

return;

}

//啟動登陸後台線程。LoginProcessForm窗體啟動MySplashThread啟動不停的打開LoginProcessForm窗體。

();

}

catch (Exception err)

{

e(err);

Dialog("錄入登錄信息發生異常,請和管理員聯繫", r);

return;

}

eProcessState previousStepResult = lete;

while (tExecute())

{

try

{

switch (entStep)

{

case eLoginState.__:

case eLoginState.__:

case eLoginState.__:

case eLoginState.__:

}

previousStepResult = lete;

//結束執行

xecute(previousStepResult);

}

catch (Exception error)

{

//略

}

}

}

//start中的對過程的控制。

static public void Show()

{

try

{

//當第二次調用的時候MySplashThread != null了這個時候

if (MySplashThread != null)

{

// public void Reset()

//{

// t();

//currentItemIndex = 0;

//}

//相當於觸發t事件。

ke(new MethodInvoker(t));

//將窗體顯示出來。

ke(new MethodInvoker());

return;

}

//當第一次的時候調用構造函數構造出窗體。構造出來以後();通知

if (MySplashForm == null)

{

MySplashForm = new LoginProcessForm(myResetEvent);

}

//這裏只是每次都調用(MySplashForm);作用相當於建立起信息循環隊列

MySplashThread = new Thread(new ThreadStart(Thread));

ckground = true;

partmentState();

t();

//等待直到();

One(5000);

}

catch (Exception err)

{

e(err);

}

}

//構造函數。

public LoginProcessForm(AutoResetEvent autoreset)

{

myResetEvent = autoreset;

Renderer = new SkinFormLoginFormRender();

InitializeComponent();

//ost = true;

//eBox = true;

CanMoveWindow = false;

= "Version:" + mblyFileVersion;

+= new EventHandler(LoginProcessForm_Load);

}

delegate void EndExecuteCallback(eProcessState previousProcessResult);

static public void EndExecute(eProcessState previousProcessResult)

{

//winform中子線程不能更新主線程的`控件。所以keRequired代表是否需要更新主線程控件。

//如果需要更新的話ke

if (keRequired)

{

//回調會繼續執行previousProcessResult,等下次的時候就會到下面去執行了。

ke(new EndExecuteCallback(EndExecute), previousProcessResult);

}

else

{

//如果

xecute(previousProcessResult);

}

}

///

/// 進入下一過程

///

///

///

public void EndExecute(eProcessState previousProcessResult)

{

//progressView為我們使用的用户控件

ip(processItems[currentItemIndex], previousProcessResult);

currentItemIndex++;

}

//關閉代碼

static public void Close()

{

try

{

if (MySplashThread == null) return;

if (MySplashForm == null) return;

try

{

ke(new MethodInvoker(e));

}

catch (Exception err)

{

e(err);

}

t();

}

catch (Exception err)

{

e(err);

}

finally

{

MySplashThread = null;

MySplashForm = null;

}

}