您的位置:首页 > 编程语言 > C#

C# 挂起恢复运行线程代码

2010-05-05 17:52 176 查看
//C# 挂起恢复运行线程代码 暂时没找到和测试出替换Thread.Resume()恢复运行和Thread.Suspend()暂停挂起的函数

//添加引用

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

using System.Threading;
using System.Collections;

//定义变量

private Thread convertThread;
private Mutex mutex = new Mutex();
Queue myThreadQueue=new Queue();

//按钮事件

private void btnConstraintToBig5_Click(object sender, EventArgs e)
{
this.btnConstraintToBig5.Enabled = false;

//测试数据库连接
this.richTextBox1.Text = "";
CurrentServerName = this.txtServerName.Text.Trim();
CurrentDatabaseName = this.txt_DatabaseName.Text.Trim();
CurrentUserName = this.txt_UserName.Text.Trim();
CurrentUserPassword = this.txt_Password.Text.Trim();
CurrentConnectionString = "Data Source=" + CurrentServerName + ";Initial Catalog=Master;User ID=" + CurrentUserName + ";password=" + CurrentUserPassword;

DataTable myDataTable = new DataTable();
try
{
SqlConnection thisConnection = new SqlConnection(CurrentConnectionString);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand("select * from sysservers", thisConnection);
DataSet ds = new DataSet();
da.Fill(ds, "Temp");
myDataTable = ds.Tables["Temp"];
thisConnection.Close();
if (myDataTable.Rows.Count > 0)
{
this.richTextBox1.Text += "/r/n建立到数据库连接成功";
CurrentConnectionString = "Data Source=" + CurrentServerName + ";Initial Catalog=" + CurrentDatabaseName + ";User ID=" + CurrentUserName + ";password=" + CurrentUserPassword;
convertThread = new Thread(new ThreadStart(StartConvertConstraintToBig5));
convertThread.IsBackground = true;
convertThread.Start();
}
else
{
this.richTextBox1.Text += "/r/n建立到数据库连接失败";
}
}
catch (Exception ex)
{
this.richTextBox1.Text += "/r/n建立到数据库连接出错" + ex.Message;
}
}

//线程调用函数

/// <summary>
/// 线程调用的监听转换数据表约束到简体版函数
/// </summary>
private void StartConvertConstraintToBig5()
{
lock (myThreadQueue)
{
mutex.WaitOne();
myDataBaseConverter.BeginConvertingMessage += new DataBaseEventHandler(OnBeginMessageReceived);
myDataBaseConverter.EndConvertingMessage += new DataBaseEventHandler(OnEndMessageReceived);
myDataBaseConverter.CurrentConvertingMessage += new DataBaseEventHandler(OnCurrentMessageReceived);
myDataBaseConverter.ConvertingErrorMessage += new DataBaseEventHandler(OnErrorMessageReceived);
myDataBaseConverter.ConvertTableConstraintToBig5(CurrentConnectionString);
mutex.ReleaseMutex();
}
}

//暂停恢复线程运行

private void btnPauseConverting_Click(object sender, EventArgs e)
{
if (convertThread != null)
{
Console.WriteLine("当前线程状态名称:" + convertThread.ThreadState.ToString());
Console.WriteLine("当前线程状态编号:" + Convert.ToInt32(convertThread.ThreadState).ToString());

if (this.btnPauseConverting.Text == "继续转换" && Convert.ToInt32(convertThread.ThreadState) == 68)
{
try
{
this.btnPauseConverting.Text = "暂停转换";
convertThread.Resume();
}
catch (Exception msg)
{
MessageBox.Show(msg.ToString(), "异常");
}
}
else if (this.btnPauseConverting.Text == "暂停转换" && Convert.ToInt32(convertThread.ThreadState) == 36)
{
try
{
this.btnPauseConverting.Text = "继续转换";
convertThread.Suspend();
}
catch (Exception msg)
{
MessageBox.Show(msg.ToString(), "异常");
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: