سوال : استفاده از تایمر در سی شارپ

#C

توسط thearrow در 5 سال پیش
0 1.1k 7 5 سال پیش
thearrowmicrosoftmanvbprogrammerxman
0

سلام

من با تایمر کار کردم اما اینجا به یک مشکل بر خوردم اونم اینه که دارم یک قسمت میسازم که مثلا به محظ ورود کاربر به اتاق چت اون رو Member کنه اما با فاصله زمانی 5 ثانیه اینکارو بکنه ، یعنی اینکه اول آیدی که وارد شد رو ذخیره کنه و بعد از گذشت 5 ثانیه اون رو member کنه

به مثال زیر توجه کنید : [CSHARP] private void room1(object sender, agsXMPP.protocol.client.Presence pres) { if (InvokeRequired) { BeginInvoke(new agsXMPP.protocol.client.PresenceHandler(room1), new object[] { sender, pres }); return; } else {

            if (pres.Type == PresenceType.available)
            {
                    x.Send("<iq xmlns='jabber:client' to='" + txtroom.Text + "@conference.jabber.org' type='set' id='353'><query xmlns='http://jabber.org/protocol/muc#admin'><item affiliation='member' jid='" + pres.From.Resource + "@jabber.org' /></query></iq>");
            }
        }
    }

[/CSHARP]

این دستور هر کی که وارد اتاق چت بشه رو member میکنه من میخوام دقیقا همین کد رو با تایمر انجام بده همونطور که بالا گفتم

من خودم اینکار و انجام دادم اما اشتباه بود ، چطوری؟ اینجوری : من اومدم تعریف کردم که به محض ورود آیدی 5 ثانیه بعد آیدی رو member کنه ، با این فقط یک آیدی member میشد و آیدی های بعدی که وارد میشدند هیچ کاری روی اونها انجام نمیشد و به اصطلاح آیدی از دست برنامه در میرفت من میخوام آیدی ها رو به محض ورود حالا چه یه آیدی و چه صد آیدی ، اول ذخیره کنه و بعد تک تک هرکدوم رو با گذشتِ 5ثانیه member کنه و وقتی که member کردن تموم شد لیست ذخیره ها رو پاک کنه ، اینجوری دیگه آیدی از دست برنامه در نمیره و تک تک آیدی ها به ترتیب با فاطله زمانی 5 ثانیه member میشن و لیست ذخیره ها هم پاک میشه و برای تکرار این کار برای بار های بعد آماده میش و آیدی اصلی خود برنامه هم مسدود نمیشه

ممنون

0

سلام میتونی از sleep استفاده کنی در صورت امکان پروژه رو ضمیمه کن تا بهتر بتونیم کمک کنیم

0

اون کامپوننت کمی حجمش بالاست من همینطوری یه چیز درست کردم فکر کنم باید کار کنه میتونی بجای اون کدی که member میکنه تایمر رو فعال کنی بعد کد اصلی رو تو تایمر بذاری باید حواست باشه که بعد تایمر باید خودش رو غیر فعال کنه

[CSHARP]using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; //./////////////////////////////

using agsXMPP; using agsXMPP.Xml.Dom; using agsXMPP.protocol.client;

namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } XmppClientConnection x = new XmppClientConnection();

    private void button1_Click(object sender, EventArgs e)
    {
        x.Server = "nimbuzz.com";
        x.ConnectServer = "o.nimbuzz.com";
        x.Open(txtid.Text, txtpw.Text, txtres.Text , 50);
        x.AutoRoster = true;

        x.OnAuthError += new XmppElementHandler(failed);
        x.OnLogin += new ObjectHandler(connected);
        x.OnClose += new ObjectHandler(dc);
        x.OnPresence += new agsXMPP.protocol.client.PresenceHandler(room);
    }
    private void failed(object sender, Element e)
    {
        if (base.InvokeRequired)
        {
            base.BeginInvoke(new XmppElementHandler(failed), new object[] { sender, e });
        }
        else
        {
            txtid.BackColor = Color.Red;
            txtpw.BackColor = Color.Red;
            txtres.BackColor = Color.Red;
            txtid.Enabled = true;
            txtpw.Enabled = true;
            txtres.Enabled = true;
        }
    }

    private void connected(object sender)
    {
        if (base.InvokeRequired)
        {
            base.BeginInvoke(new ObjectHandler(connected), new object[] { sender });
        }
        else
        {
            txtid.BackColor = Color.Green;
            txtpw.BackColor = Color.Green;
            txtres.BackColor = Color.Green;
            txtid.Enabled = false;
            txtpw.Enabled = false;
            txtres.Enabled = false;
        }
    }

    private void dc(object sender)
    {
        if (base.InvokeRequired)
        {
            base.BeginInvoke(new ObjectHandler(dc), new object[] { sender });
        }
        else
        {
            txtid.BackColor = Color.Yellow;
            txtpw.BackColor = Color.Yellow;
            txtres.BackColor = Color.Yellow;
            txtid.Enabled = true;
            txtpw.Enabled = true;
            txtres.Enabled = true;
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        x.Close();
    }

    private void room(object sender, agsXMPP.protocol.client.Presence Pres)
    {


        if (InvokeRequired)
        {
            base.BeginInvoke(new agsXMPP.protocol.client.PresenceHandler(room), new object[] { sender, Pres });
            return;
        }
        else
        {
            if (Pres.Type == PresenceType.available)
            {

                if (checkBox1.Checked == true)// AUTO MEMBER
                {
                    timer1.Interval = 5000;
                    timer1.Enabled = true;

                  //  x.Send("<iq xmlns='jabber:client' to='" + txtroom.Text + "@conference.nimbuzz.com' type='set' id='353'><query xmlns='http://jabber.org/protocol/muc#admin'><item affiliation='member' jid='" + Pres.From.Resource + "@nimbuzz.com' /></query></iq>");
                }
                else
                {
                    if (checkBox1.Checked == false)
                    {
                        MessageBox.Show("Auto Member Khamosh Shod");
                    }
                }
            }
        }
    }

    private void button3_Click(object sender, EventArgs e)
    {
        try
        {
            x.Send("<presence to='" + txtroom.Text + "@conference.nimbuzz.com/" + txtid.Text + "' xml:lang='en'><x xmlns='http://jabber.org/protocol/muc'><password>" + txtroompw.Text + "</password></x></presence>");
        }
        catch { }
    }

    private void button4_Click(object sender, EventArgs e)
    {
        x.Send("<presence to='" + txtroom.Text + "@conference.nimbuzz.com/' type='unavailable'></presence>");
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        x.Send("<iq xmlns='jabber:client' to='" + txtroom.Text + "@conference.nimbuzz.com' type='set' id='353'><query xmlns='http://jabber.org/protocol/muc#admin'><item affiliation='member' jid='" + Pres.From.Resource + "@nimbuzz.com' /></query></iq>");
        timer1.Enabled = false;
    }




}

} [/CSHARP]

0

سلام من تازه اومدم خونه و انجام دادم اما توی تایمر ذث Pres گیر میده و میگه : Does Not Exist in the current context

تنها در یک صورت به Pres گیر نمیده که توی این قرار بگیره : [CSHARP] if (Pres.Type == PresenceType.available) { } [/CSHARP]

و خود این هم تنها در یک صورت ارور نمیده که توی Voide خودش یعنی این باشه : [CSHARP] private void room(object sender, agsXMPP.protocol.client.Presence Pres) {

        if (InvokeRequired)
        {
            base.BeginInvoke(new agsXMPP.protocol.client.PresenceHandler(room), new object[] { sender, Pres });
            return;
        }
        else
        {
        }
    }

[/CSHARP]

چیکار کنم!؟!؟

0

سلام به همه این کد تایمر رو اینطوری کن شاید درست بشه [CSHARP]private void timer1_Tick(object sender, EventArgs e, agsXMPP.protocol.client.Presence Pres)[/CSHARP]

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.

لطفا ابتدا لاگین کنید