關於Winform多執行緒方式登入程式碼
為了方便大家學習相關的知識,YJBYS小編下面為你整理了關於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;
}
}