Проблема таймера в C# с потокамиC#

Место общения программистов C#
Ответить
Anonymous
 Проблема таймера в C# с потоками

Сообщение Anonymous »

Я разрабатываю приложение, похожее на скайп, у меня есть внешний DLL, который выполняет большую часть работы, и стреляет в события, обрабатываемые в моем классе IP2ip, одно из этих событий является входным_Каллом, когда есть входящий звонок, как следует из названия. Я пытаюсь управлять пропущенными вызовами. < /P>
Теперь это соответствующая часть кода в этом классе: < /p>

Код: Выделить всё

    private void ics_IncomingCall(object sender, string authenticationData, int socketHandle, string callbackid, string callbackipaddress, int callbackvideoport, int callbackaudiotcpport, int callbackaudiudpport)
{
if (Calling)
{
ics.RejectCall("The contact have another call", (IntPtr)socketHandle);
Message = "An incoming call from [" + callbackipaddress + "] has rejected.";
}
else
{
AcceptIncomingCall = null;

UserCaller = FindUserName(callbackipaddress);

IncomingCall = true;

//waiting for the call to be accepted from outside of this class
while (AcceptIncomingCall.HasValue == false) Thread.Sleep(100);

if(AcceptIncomingCall.Value == true)
{
//call back to have a 1 on one video conference

icc.Parent.BeginInvoke(new MethodInvoker(delegate
{
//accept the incoming call

ics.AcceptCall("n/a", socketHandle);

icc.Call(callbackipaddress, callbackvideoport, 0, 0,
"n/a", callbackid,
ics.GetLocalIp()[0].ToString(), 0, 0, 0, "");

Calling = true;
}));
}
else
{
ics.RejectCall("Call not accepted", (IntPtr)socketHandle);
Log = "Incoming call not accepted";

Calling = false;
}

AcceptIncomingCall = null;

IncomingCall = false;
}

}
< /code>
outmentcall - это свойство, генерирующее свойство, которое затрачено, которое фиксируется в моем основном классе, где у меня есть этот код: < /p>
    private void ip2ip_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e != null && string.IsNullOrEmpty(e.PropertyName) == false)
{

..............
if (e.PropertyName.Equals("IncomingCall") && ip2ip.IncomingCall == true)
{
Invoke(new MethodInvoker(delegate
{
pnlCalling.Visible = true;
aTimer.Start();
}));
}
................

}
}

public Form1()
{
.......
aTimer = new System.Windows.Forms.Timer();
aTimer.Interval = 10000;
aTimer.Tick += aTimer_Tick;
}

void aTimer_Tick(object sender, EventArgs e)
{
aTimer.Stop();
btnNo.PerformClick();
}
private void btnNo_Click(object sender, EventArgs e)
{
aTimer.Stop();
ip2ip.AcceptIncomingCall = false;
}

private void btnOk_Click(object sender, EventArgs e)
{
aTimer.Stop();
ip2ip.AcceptIncomingCall = true;
}
Мне нужен таймер для управления пропущенным вызовом, когда появляется входящий вызов, появляется панель, с кнопками для принятия/отклонения вызова. Если пользователь слишком много ждет, вызов считается отклоненным (пропущено).
Таким образом, он не работает, вероятно, я делаю что -то не так с таймером, так как без какого -либо таймера все работает. Я также попробовал таймер классовой системы. Тиммеры с теми же результатами. Есть идея? Будьте видимым и запустили таймер, теперь у нас есть один поток, в котором в цикле while блокируется выполнение до тех пор, пока в другом потоке пользователь не сделает что -то (принять/отклонить).
Проблема существует, когда пользователь принимает вызов, код после того, как цикл всегда выполняется, у вызывающего вызов нет проблем и получает поток, но при получающем видео (кто Is Assive Is As It Ared in Wirehark). не в состоянии выполнить свою работу по какой -то причине неизвестно мне, но вызвано таймером.

Подробнее здесь: https://stackoverflow.com/questions/340 ... th-threads
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»