表单加载不正确
Form not loading correctly
我正在尝试使用 JulMar 的 Atapi x86 构建基于 TAPI 的 phone 调用系统。其中一个功能是在呼入时弹出一个特定的表单。但是,每当弹出表单时,它都会出现错误,如下所示(我尝试了几种表单作为测试,它们都做同样的事情)。没有错误,输出中没有任何内容 window 表明问题所在。
代码:
private void incomingcall(object sender, NewCallEventArgs e)
{
string phonenumber = e.Call.CallerId; //get the phone number of the call
SqlCommand getincoming = new SqlCommand(Querystrings.getincomingquery(), DB);
getincoming.Parameters.AddWithValue("@@TELEPHONE", phonenumber);
DataTable results = new DataTable();
try
{
DB.Open();
using (var results = getincoming.ExecuteReader())
{
results.Load(results);
}
}
catch (Exception ex)
{
Inbound ib = new Inbound(phonenumber, null);
ib.Show();
}
finally
{
DB.Close();
}
if (results.Rows.Count == 1)
{
loadcontactrequest(Convert.ToInt32(results.Rows[0].ItemArray[0]), phonenumber);
}
else
{
loadinbound(phonenumber, results);
}
}
我在其他地方加载了这个函数之外的这些表单,这意味着它与这个函数有关。有人知道我哪里错了吗?
编辑:
private void loadcontactrequest(int ContactID, string phonenumber)
{
ContactRequest cr = new ContactRequest(ContactID, Global.loginbound("Single customer found", phonenumber));
cr.Show();
}
这些函数已经在别处测试过,并且可以单独正常工作,我相信它可能与 TAPI 相关。
编辑 2 - 代表:
public static void inittapi()
{
if (TestOptions.notapi)
return;
tapi = new TapiManager("Omitted");
tapi.Initialize();
foreach (TapiLine ad in tapi.Lines) //Get all lines available to this PC
{
if (ad.Name.ToUpper().Contains("Omitted"))
{
phoneline = ad;
phoneline.Open(MediaModes.All); //Open the phone line for making and receiving calls
phoneline.NewCall += new EventHandler<NewCallEventArgs>(new TAPI().incomingcall); //Add the incoming call event handler
}
}
}
此事件可能是在与您应用程序的 UI 线程不同的线程上触发的。
修改方法如下,测试是否是这个问题:
private void incomingcall(object sender, NewCallEventArgs e)
{
Form form;
if(Application.OpenForms.Count > 0)
{
form = Application.OpenForms[0];
}
if (form != null && form.InvokeRequired)
{
form.BeginInvoke(new Action(() => { incomingcall(sender, e); }));
return;
}
// Your current code goes here
}
这将确定我们处于与创建主窗体(窗体)不同的线程中,然后在主窗体的线程上再次执行该函数。
我正在尝试使用 JulMar 的 Atapi x86 构建基于 TAPI 的 phone 调用系统。其中一个功能是在呼入时弹出一个特定的表单。但是,每当弹出表单时,它都会出现错误,如下所示(我尝试了几种表单作为测试,它们都做同样的事情)。没有错误,输出中没有任何内容 window 表明问题所在。
代码:
private void incomingcall(object sender, NewCallEventArgs e)
{
string phonenumber = e.Call.CallerId; //get the phone number of the call
SqlCommand getincoming = new SqlCommand(Querystrings.getincomingquery(), DB);
getincoming.Parameters.AddWithValue("@@TELEPHONE", phonenumber);
DataTable results = new DataTable();
try
{
DB.Open();
using (var results = getincoming.ExecuteReader())
{
results.Load(results);
}
}
catch (Exception ex)
{
Inbound ib = new Inbound(phonenumber, null);
ib.Show();
}
finally
{
DB.Close();
}
if (results.Rows.Count == 1)
{
loadcontactrequest(Convert.ToInt32(results.Rows[0].ItemArray[0]), phonenumber);
}
else
{
loadinbound(phonenumber, results);
}
}
我在其他地方加载了这个函数之外的这些表单,这意味着它与这个函数有关。有人知道我哪里错了吗?
编辑:
private void loadcontactrequest(int ContactID, string phonenumber)
{
ContactRequest cr = new ContactRequest(ContactID, Global.loginbound("Single customer found", phonenumber));
cr.Show();
}
这些函数已经在别处测试过,并且可以单独正常工作,我相信它可能与 TAPI 相关。
编辑 2 - 代表:
public static void inittapi()
{
if (TestOptions.notapi)
return;
tapi = new TapiManager("Omitted");
tapi.Initialize();
foreach (TapiLine ad in tapi.Lines) //Get all lines available to this PC
{
if (ad.Name.ToUpper().Contains("Omitted"))
{
phoneline = ad;
phoneline.Open(MediaModes.All); //Open the phone line for making and receiving calls
phoneline.NewCall += new EventHandler<NewCallEventArgs>(new TAPI().incomingcall); //Add the incoming call event handler
}
}
}
此事件可能是在与您应用程序的 UI 线程不同的线程上触发的。
修改方法如下,测试是否是这个问题:
private void incomingcall(object sender, NewCallEventArgs e)
{
Form form;
if(Application.OpenForms.Count > 0)
{
form = Application.OpenForms[0];
}
if (form != null && form.InvokeRequired)
{
form.BeginInvoke(new Action(() => { incomingcall(sender, e); }));
return;
}
// Your current code goes here
}
这将确定我们处于与创建主窗体(窗体)不同的线程中,然后在主窗体的线程上再次执行该函数。