当前位置:学者斋 >

IT认证 >ACCP >

关于Winform多线程方式登录代码

关于Winform多线程方式登录代码

  • ACCP
  • 关注:2.49W次

为了方便大家学习相关的知识,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;

}

}

  • 文章版权属于文章作者所有,转载请注明 https://xuezhezhai.com/itrz/accp/lxrn1o.html