當前位置:才華齋>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;

}

}