PDA

View Full Version : باز پس گیری حافظه و Access Denied to com11



nbe( amateur C sharp
دوشنبه 02 خرداد 1390, 09:23 صبح
با سلام... ببخشید من سوالی داشتم....
من یک برنامه دارم که با serialport ها با com11 کار میکنه و پورت رو باز میکنم و اطلاعات را میخونم... برنامه باید به طور دائم کار کنه و هر n میلی ثانیه پورت رو باز میکنه و اطلاعات را میگیر ه و دوباره پورت رو میبنده ، و هر بار قبل از اینکه باز کنه باید با new برای متغیرم حافظه بگیرم چون ممکنه پارامترهای ورودی توسط کاربر تغییر کنه ، به خاطر همین حافظه میگیرم و بعد پورت رو باز میکنم... اما بعد از مدتی که برنامه اجرا میشه به من error میده که Access Denied to com11 است ، میخواستم بدونم چرا این error رو میده؟؟؟ خودم فکر میکنم چون حافظه رو پس نمیگیرم آخر برنامه و فقط پورت رو close میکنم، اما نمیدونم هم که چه جوری حافظه رو پس بگیرم، میشه راهنمائیم کنید؟؟؟
تکه کد رو هم مبفرستم:

public void POLL()
}
-----//
SerialPort serialPort1 = newSerialPort("COM11", 2400, pa, 8, st);
serialPort1.Open();
-------////
serialPort1.Close();


{


این POLL هر n میلی ثانیه فراخوانی میشه و تمام این قسمت تکرار میشه ، اما بعد از مدتی اون error بالا رومیده... ممنون میشم یکی راهنمائی کنه...

محسن شامحمدی
دوشنبه 02 خرداد 1390, 11:16 صبح
واسه این که این شی رو از حافظه نابود کنی این کد رو به قسمت آخر کدت اضافه کن
serialPort1=Null;

nbe( amateur C sharp
دوشنبه 02 خرداد 1390, 14:03 عصر
ممنونم بابت پاسختون ، من این تکه کد رو اضافه کردم، ولی باز هم همون error رو دارم ، Access to 'com11' is denied ، چرا آخه؟؟؟!!!

محسن شامحمدی
دوشنبه 02 خرداد 1390, 15:46 عصر
این تابع رو توی چند تا ترد همزمان که اجرا نمی کنین؟

nbe( amateur C sharp
دوشنبه 02 خرداد 1390, 16:13 عصر
کل کلاسی که نوشتم و فراخوانی میشه اینه


public void poll_ups()
{
// Check For Device Connected
bool DeviceConnect = false;
//------------------
//StopBits StBit = 1
SerialPort serialPort1 = new SerialPort("COM11", 2400, pa, 8, st);
var buffer = new byte[1000];
var status = new UPSStatus();
if (!serialPort1.IsOpen) serialPort1.Open();
//serialPort1.Open();
serialPort1.WriteLine("Q1"); Thread.Sleep(500);
var index = 0;
//textBox3.Text = serialPort1.BytesToRead.ToString();
while (serialPort1.BytesToRead > 0) { serialPort1.Read(buffer, index++, 1); Thread.Sleep(10); }

//textBox1.Text = index.ToString();
UPSFunctions.FillQ1(buffer, index, status);
//textBox1.Text = "finish Q1";
serialPort1.WriteLine("Q4"); //Thread.Sleep(500);
index = 0;
while (serialPort1.BytesToRead > 0) { serialPort1.Read(buffer, index++, 1); Thread.Sleep(10); }

UPSFunctions.FillQ4(buffer, index, status);
//textBox2.Text = "finish Q4";
serialPort1.WriteLine("QF"); Thread.Sleep(500);
index = 0;
while (serialPort1.BytesToRead > 0) { serialPort1.Read(buffer, index++, 1); Thread.Sleep(10); }
UPSFunctions.FillQF(buffer, index, status);
serialPort1.Close();
serialPort1 = null;

DeviceConnect = true;
status.DeviceConnected = DeviceConnect;
Status_DB(status);

}


و حالا اون UPSSTATUS , FIll خودشون داخل یک کلاس دیگه تعریف شدن و اون Q1 و.. هم که command هستند نمیدونم چرا روی com11 error میده؟؟؟

nbe( amateur C sharp
دوشنبه 02 خرداد 1390, 16:20 عصر
public void poll_ups()
{
// Check For Device Connected
bool DeviceConnect = false;
//------------------
MYKIOSK SQ = new MYKIOSK();
SQ.Open();
Parity pa = (System.IO.Ports.Parity)Convert.ToInt32(0);
//DataBits = Convert.ToInt32(node.Attributes["DataBits"].Value);
StopBits st = (System.IO.Ports.StopBits)Convert.ToInt32("1");
//-----
//StopBits StBit = 1
SerialPort serialPort1 = new SerialPort("COM11", 2400, pa, 8, st);
var buffer = new byte[1000];
var status = new UPSStatus();
if (!serialPort1.IsOpen) serialPort1.Open();
//serialPort1.Open();
serialPort1.WriteLine("Q1"); Thread.Sleep(500);
var index = 0;
//textBox3.Text = serialPort1.BytesToRead.ToString();
while (serialPort1.BytesToRead > 0) { serialPort1.Read(buffer, index++, 1); Thread.Sleep(10); }

//textBox1.Text = index.ToString();
UPSFunctions.FillQ1(buffer, index, status);
//textBox1.Text = "finish Q1";
serialPort1.WriteLine("Q4"); //Thread.Sleep(500);
index = 0;
while (serialPort1.BytesToRead > 0) { serialPort1.Read(buffer, index++, 1); Thread.Sleep(10); }

UPSFunctions.FillQ4(buffer, index, status);
//textBox2.Text = "finish Q4";
serialPort1.WriteLine("QF"); Thread.Sleep(500);
index = 0;
while (serialPort1.BytesToRead > 0) { serialPort1.Read(buffer, index++, 1); Thread.Sleep(10); }
UPSFunctions.FillQF(buffer, index, status);
serialPort1.Close();
serialPort1 = null;

//textBox3.Text = "finish QF";
//textBox4.Text = "finish";
//------------ Store in DB
DeviceConnect = true;
status.DeviceConnected = DeviceConnect;
Status_DB(status);

}