PDA

View Full Version : مشکل با برنامه در سیستم مشتری



alias136790
یک شنبه 30 تیر 1392, 12:23 عصر
من یه برنامه تحت شبکه محلی دارم .
و تو سیستم کاربر، با شروع برنامه من یه Thread رو Start میکنم، اما چند ثانیه بعداش با خطای زیر روبرو میشم.
من از Try,Catch ، هنگام لود برنامه و هنگام Thread.Start استفاده میکنم.اما بازم با خطای زیر روبرو میشم:

107653

نمیدونم دیگه چطور میتونم برنامه رو خطایابی کنم.

parvizwpf
یک شنبه 30 تیر 1392, 14:16 عصر
کدی که نوشتید چیه؟

alias136790
یک شنبه 30 تیر 1392, 22:59 عصر
تو کلاس Program ،یه شی از کلاس KA رو تعریف میکنم:
public static KA k = new KA();
تو فرم لاگین برنامه از این کد استفاده میکنم:
mainform.Show();
Program.k.Start();
اینم کلاس KA:
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using MessageBoxFarsi;
using Bll;
namespace St_User
{
public class KA
{
Student blSt = new Student();
int r;
Thread thread;
AutoResetEvent are;
public static bool StopThread = false;
bool started;

public bool Started
{
get
{
return started;
}
}

internal KA()
{
try
{
started = false;
are = new AutoResetEvent(false);
thread = new System.Threading.Thread(Loop);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "ُُinternal Thread");
MessageBox.Show(ex.ToString(), "internal Thread");
}
}

void Loop()
{
try
{
while (!are.WaitOne(60000))
{
r = blSt.UpdateStDateOn(CurrentData.StudentNo);
if (r == 1)
{
MessageFarsi.Show("ُخروج", 10);
are.Set();
StopThread = true;
Application.Exit();
}
// else if(r !=1)
// MessageBox.Show(r.ToString());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "ُُloop Thread");
MessageBox.Show(ex.ToString(), "loop Thread");
}
}

internal void Start()
{
try
{
if (started)
throw new InvalidOperationException("KeepAlive aleady started.");
started = true;
thread.Start();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "ُُStart Thread");
MessageBox.Show(ex.ToString(),"ُُStart Thread");
}
}

internal void Stop()
{
try
{
if (!started) throw new InvalidOperationException("Cannot stop an already stopped KeepAlive.");
are.Set();
thread.Join();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "ُُStop Thread");
MessageBox.Show(ex.ToString(), "ُُStop Thread");
}
}

}
}


حالا این برنامه تو سیستم من خیلی راحت، بدون خطا کار میکنه.
اما تو سیستم مشتری خطای بالا رو میده!

hojjatshariffam
دوشنبه 31 تیر 1392, 22:29 عصر
باید کدتو توضیخ بدی و بگی که اینو برا چی نوشتی
اونوق اگه کسی تونسا کمکت می کنه

alias136790
دوشنبه 31 تیر 1392, 23:00 عصر
در واقع با استفاده از کد پایین، هر یه دقیقه ،آخرین ساعت آنلاین بودن کاربر رو تو دیتابیس ذخیره میکنه و اگه مدیر درخواست خروج کاربر رو داشت،با نشون دادن یه پیغام خروج به کاربر، از برنامه خارج بشه.
while (!are.WaitOne(60000))
{
r = blSt.UpdateStDateOn(CurrentData.StudentNo);
if (r == 1)
{
MessageFarsi.Show("ُخروج", 10);
are.Set();
StopThread = true;
Application.Exit();
}

باقی کدها هم مربوط به Start و Stop کردن Thread هست.

چرا تو سیستم من درست کار میکنه، اما تو سیستم مشتری خطا میگیره؟

alias136790
سه شنبه 01 مرداد 1392, 12:47 عصر
خب توضیحات رو نوشتم ، حالا مشکل از کجاست؟