Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# #C事件触发方法-在Form1中访问_C#_Winforms - Fatal编程技术网

C# #C事件触发方法-在Form1中访问

C# #C事件触发方法-在Form1中访问,c#,winforms,C#,Winforms,我正在尝试使用dll编写屏幕弹出通话日志,以捕获电话系统上的事件。正如您在下面的代码中看到的3个事件: OnOffering-电话铃声超过当前号码时的呼叫方法 OnConnect-在应答通过的当前号码时调用方法 OnDisconnect-调用disconnect方法 其思想是在调用OnConnect方法时从SQL数据库中提取信息,并显示在windows窗体上(前提是该号码以前已存储)。我已经设计了表单,并在一个单独的类中编写了所有sql函数,我可以从表单中调用这些函数。我计划在事件发生时调用的方

我正在尝试使用dll编写屏幕弹出通话日志,以捕获电话系统上的事件。正如您在下面的代码中看到的3个事件:

OnOffering-电话铃声超过当前号码时的呼叫方法 OnConnect-在应答通过的当前号码时调用方法 OnDisconnect-调用disconnect方法

其思想是在调用OnConnect方法时从SQL数据库中提取信息,并显示在windows窗体上(前提是该号码以前已存储)。我已经设计了表单,并在一个单独的类中编写了所有sql函数,我可以从表单中调用这些函数。我计划在事件发生时调用的方法从数据库返回一个引用传入号码的datatable

我可以在OnConnect方法中很好地调用我的sql搜索方法,但问题是如何将datatable传递给表单

还是有更好的方法

谢谢

Program.cs

using System;
using System.Windows.Forms;
using TelephonyProxy;
using System.Data;

namespace CallLog
{
   static class Program
   {
      private static Listener listener;
      private static MainForm mainForm;

      /// <summary>
      /// The main entry point for the application.
      /// </summary>
      [STAThread]
      static void Main()
      {
         Application.EnableVisualStyles();
         Application.SetCompatibleTextRenderingDefault(false);
         mainForm = new MainForm();
         listener = new Listener();
         SubcribeToListener();
         Application.Run(mainForm);
      }

      private static void SubcribeToListener()
      {
         listener.Connect += OnConnect;
         listener.Disconnect += OnDisconnect;
         listener.Offering += OnOffering;
      }

      private static void OnOffering(string name, string number)
      {

      }

      private static void OnDisconnect()
      {

      }

      private static void OnConnect(string name, string number)
      {
          DataTable dt;
          dt = CommonSQLFunctions.SearchQuery(number);

      }


   }
}
使用系统;
使用System.Windows.Forms;
使用电话探针;
使用系统数据;
命名空间调用日志
{
静态类程序
{
私有静态侦听器;
私有静态MainForm MainForm;
/// 
///应用程序的主要入口点。
/// 
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
mainForm=新的mainForm();
listener=新的listener();
subcribetListener();
Application.Run(mainForm);
}
私有静态void subcribetListener()
{
listener.Connect+=OnConnect;
Disconnect+=OnDisconnect;
listener.providing+=OnOffering;
}
私有静态void OnOffering(字符串名称、字符串编号)
{
}
私有静态无效OnDisconnect()
{
}
专用静态void OnConnect(字符串名称、字符串编号)
{
数据表dt;
dt=CommonSQLFunctions.SearchQuery(数字);
}
}
}

因此,do应该有一个
MainForm.cs
,我认为在该MainForm类中而不是在程序类中使用subscribe、offer、connect和disconnect方法更有意义


MainForm类将有一个
Listener
字段,在MainForm构造函数中,可以调用SubscribeToListener方法将事件处理程序附加到侦听器上的事件。这样,当OnConnect事件处理程序运行时,您已经在MainForm中,因此,您可以方便地在此时对数据集执行任何需要的操作。

因为将项目移动到MainForm.cs,所以调用连接函数时,我的程序会抛出以下错误:附加信息:跨线程操作无效:从创建控件“nameBox”的线程以外的线程访问控件“nameBox”。有什么办法可以解决这个问题吗?我想您可能需要创建一个新问题,并在其中包含更新的代码。它将得到更多的关注,而不仅仅是在我的答案上以注释的形式发布错误,您将能够在那里显示更新的代码。一旦你有了新问题,就把它和我联系起来,我可以试着重现错误,并帮你解决。