关于网友提出的“c# KernelBasedll异常 多线程 win 2008”问题疑问,本网通过在网上对“c# KernelBasedll异常 多线程 win 2008”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:c# KernelBasedll异常 多线程 win 2008
描述:
多线程 数据传输 在自己电脑上可以正常运行(win 7 32位),但在客户服务器上运行就报错了(win sever 2008 64位 内存16G)

附上代码:
Thread[] threads = new Thread[12];
for (int i = 0; i < 12; i++)
{
threads[i] =
new Thread(new ParameterizedThreadStart(UPFH));
}
for (int i = 0; i < 12; i++)
{
Thread t = threads[i];
t.Start(i);
}
=============================================================================
public void UPFH(object obj)
{
int mm = 0;//分
int ss = 0;//秒
if (Convert.ToInt16(obj.ToString()) >= 6)
{
ss = 1;
mm = Convert.ToInt16(obj.ToString()) - 6;
}
else
{
ss = 0;
mm = Convert.ToInt16(obj.ToString());
}
//lock (threadLock)
{
InvokePro mDelegate = new InvokePro(InsertListView);
try
{
DateTime CurrentTime = DateTime.Now;
string DATE = CurrentTime.ToString("yyyyMMdd");
string TIME = CurrentTime.ToString("HHmmss");
Int32 NumPos = 0;
Socket serverSocket;
serverSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
string SendLX = string.Empty;
string SendMsg = string.Empty;
string AceeMsg = string.Empty;
string SendTotal = string.Empty;
//int count;
Int32 qcount;
CS = new CSocket(serverSocket);
string sql = "select lsh, swaprec from t_collalldatatemp t where state='0' and (mod(to_number(substr(rq,13,2)), 2) ='" + ss + "') and substr(rq,11,1)='" + mm + "'";
// string sql = "select lsh, swaprec from t_colldatabaktemp t where state='0' and uprq='"+obj.ToString()+"'";
DataTable DtPos = OracleHelper.ExecuteDataTable(OracleHelper.ConnectionString, sql);
NumPos = Convert.ToInt32(DtPos.Rows.Count);
if (NumPos > 0)
{
lvResult.Invoke(mDelegate, new object[] { "客户端", obj.ToString() + " " + Thread.CurrentThread.ManagedThreadId, "开始上传消费数据... " });
if (CS.Open(serverIp, Convert.ToInt16(port)) == "0")
{
qcount = 0;
for (Int32 iSWAPREC = 0; iSWAPREC < NumPos; iSWAPREC++)
{
CS.AcceptStr = null;
SendTotal = string.Empty;
SendLX = "8030";
SendMsg = "00000003" + GetXzDataSocket(DtPos.Rows[iSWAPREC]["swaprec"].ToString());
byte[] textBuffer = System.Text.Encoding.Default.GetBytes(SendMsg);
SendTotal = SendLX + SendMsg + CRC16(textBuffer);
lock (threadLock)
{
CS.Send(SendTotal);
//count = 0;
while (true)
{
Thread.Sleep(100);
AceeMsg = CS.AcceptStr;
if (AceeMsg != null)
{
if (AceeMsg.Substring(0, 6) == "808000")
{
qcount++;
sql = "update t_collalldatatemp set state='1' where lsh='" + DtPos.Rows[iSWAPREC]["lsh"].ToString() + "' ";
OracleHelper.InsertDataSet(sql);
this.Invoke((Action)delegate
{
//this.Text = obj.ToString() + " " + Convert.ToInt32(iSWAPREC).ToString();
this.Text = mm+" "+ss + " " + Convert.ToInt32(iSWAPREC).ToString();
});
break;
}
}
break;
}
}
}
sql = "Insert into t_colldatabak Select * From t_collalldatatemp where state='1'";
OracleHelper.InsertDataSet(sql);
sql = "DELETE From t_collalldatatemp where state='1'";
OracleHelper.InsertDataSet(sql);
CS.Cancel();
lvResult.Invoke(mDelegate, new object[] { "客户端", obj.ToString()+" "+Thread.CurrentThread.ManagedThreadId, " 上传数: " + Convert.ToInt32(NumPos).ToString()});
//lvResult.Items.Insert(0, AddListViewItem("客户端", txtJMJIPAddress.Text + ":" + txtJMJPort.Text, " 上传数: " + Convert.ToInt32(NumPos).ToString() + " 确认数: " + Convert.ToInt32(qcount).ToString()));
}
}
}
catch (Exception err)
{
lvResult.Items.Insert(0, AddListViewItem("客户端", "error", err.Message));
}
}
}
解决方案1:
在你电脑上可以,其它都不行 那就只能说是运行环境的问题了。
解决方案2: err.Message 没信息么? 贴这么多代码 没人会去测试的。 是环境或者缺少某些文件 导致的
以上介绍了“c# KernelBasedll异常 多线程 win 2008”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1039008.html