Теперь это соответствующая часть кода в этом классе: < /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
Мобильная версия