public void startThread()
{
Thread th1 = new Thread(new ThreadStart(fun));
th1.IsBackground = true;//设为后台线程
th1.Start();
}
void fun()
{
for (int i=0; i<5; i++)
{
label1.text += i;
}
}
运行结果:label1上显示:01234.
我的问题:如何让label1上一直不停的循环显示01234,也就是让线程一直执行fun函数。
希望详细解答,本人新手!急!
{
Thread th1 = new Thread(new ThreadStart(fun));
th1.IsBackground = true;//设为后台线程
th1.Start();
}
void fun()
{
for (int i=0; i<5; i++)
{
label1.text += i;
}
}
运行结果:label1上显示:01234.
我的问题:如何让label1上一直不停的循环显示01234,也就是让线程一直执行fun函数。
希望详细解答,本人新手!急!
解决方案 »
- 有没有象 sqlhelper 一样的访问 access数据库的类呢?
- 我刚刚学,下了个源码但是运行结果当前上下文中不存在名称“SqlHelper”是为什么啊?
- 关于画图的问题,高分请教!! 急
- C# PANEL中添加的窗体层叠,排列等显示
- 一条SQL语句的存储过程,共享!!!
- 求几条正则表达式的含义,顺带求正则表达式资料下载!!
- treeview绑定到数据库,我如何得到选定节点的ID值
- 我时WMI方面的新手,可是说刚刚接触,我需要这方面的书籍
- 怎么释放资源得问题
- 怎样给listview下面加一个合计,滚动水平滚动条,合计行不动
- .net单用户登录系统怎样实现管理员密码修改功能
- WCF的连接问题
{
while(true)
{
for (int i=0; i<5; i++)
{
label1.text += i;
}
}
}
窗体上放了四个TextBox输入四个时间,通过Button提交修改后的时间,这四个时间存入time1数组,当系统时间与这四个时间相同是就执行runRestart1();
我的问题:只在第一个TextBox显示的时间时执行了runRestart1();其他三个时间都不执行。我想让他执行。
我调试看了一下修改的时间是成功的,time1存入了新修改的值。
private Thread th1;
private string[] time1 = new string[4];
public Form1()
{
InitializeComponent();
Initialize();
}void Initialize()
{
startThread();
}public void startThread()
{
th1 = new Thread(new ThreadStart(listenTime1));
th1.IsBackground = true;//设为后台线程
th1.Start();
}public void listenTime1()
{
while (true)
{
foreach (string i in time1)
{
if (Convert.ToDateTime(i).ToString("HH:mm") == DateTime.Now.ToString("HH:mm"))
{
runRestart1();
}
}
}
}private void btn_ConfirmTime1_Click(object sender, EventArgs e)
{
try
{
Properties.Settings.Default.time1 = tb_RestartTime1.Text.ToString();
Properties.Settings.Default.time2 = tb_RestartTime2.Text.ToString();
Properties.Settings.Default.time3 = tb_RestartTime3.Text.ToString();
Properties.Settings.Default.time4 = tb_RestartTime4.Text.ToString();
Properties.Settings.Default.Save(); time1[0] = tb_RestartTime1.Text.ToString();
time1[1] = tb_RestartTime2.Text.ToString();
time1[2] = tb_RestartTime3.Text.ToString();
time1[3] = tb_RestartTime4.Text.ToString(); MessageBox.Show("时间设置成功!");
}
catch (Exception ex)
{
ex.ToString();
} }
{
while (true)
{
Thread.Sleep(100);
foreach (string i in time1)
{
if (Convert.ToDateTime(i).ToString("HH:mm") == DateTime.Now.ToString("HH:mm"))
{
runRestart1();
}
}
}
}
试试
在mian()函数加这行代码
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
foreach (string i in time1)
{
if (Convert.ToDateTime(i).ToString("HH:mm") == DateTime.Now.ToString("HH:mm"))
{
runRestart1();
}
}runRestart1();
是干什么的?应该是第一个时间检测到后执行它之后一直没有退出吧? 你输入时间时不要让第一个输入框的时间等于系统时间,让第三个或者第四个等于系统时间看执行情况。
/// 重启Tomcat1
/// </summary>
public void runRestart1()
{
killTomcat1();
Thread.Sleep(2000);
startTomcat1();
} /// <summary>
/// 启动Tomcat1
/// </summary>
public void startTomcat1()
{
string str1 = @"set JAVA_HOME=" + tb_JavaInstall1.Text.ToString();
string str2 = @"set CATALINA_HOME=" + tb_TomcatExtract1.Text.ToString();
string str3 = tb_TomcatExtract1.Text.ToString() + @"\bin\startup.bat"; executeMultiCmds(str1, str2, str3);
} /// <summary>
/// 关闭Tomcat1
/// </summary>
public void killTomcat1()
{
string str1 = @"set JAVA_HOME=" + tb_JavaInstall1.Text.ToString();
string str2 = @"set CATALINA_HOME=" + tb_TomcatExtract1.Text.ToString();
string str3 = tb_TomcatExtract1.Text.ToString() + @"\bin\shutdown.bat"; executeMultiCmds(str1, str2, str3);
}
问题是:比如设置两个时间:12:04,12:05,则在12:04时执行一次runRestart1(),它先killTomcat1(),再startTomcat1(),但是它执行完startTomcat1()之后就停止了,也就是执行完startTomcat1()中的executeMultiCmds(str1, str2, str3)就停止了,没有跳出startTomcat1(),更没有跳出runRestart1()。
然后当手动关闭Tomcat窗口后,在12:05时又启动了Tomcat。
应该怎么让程序启动Tomcat后退出runRestart1()呢?
是不是算正常。
如果是循环。判断是不是可能存在死循环。
如果不是。查查为何不跳出方法。