如何引发跨线程事件

2023-12-06

如何从另一个线程引发地理编码地址事件处理程序事件?

    System.Threading.Thread MapThread;
    WinformMap map ;

    public delegate void GeocodeAddressEventHandler(object sender, EventArgs e);
    public event GeocodeAddressEventHandler GeocodeAddressEvent;

    //How to Raise this Event from another thread??
    public void GeocodeAddress_Raised(object sender, EventArgs e)
    {
        MapLib.GeocodeAddress("12798 1ST ST", "", "", "");
    }

    public bool LoadMap(string restorepoint)
    {
        ////////////////////////Engine Controls////////////////////////////////////////////////////////
        try
        {
            System.ServiceModel.OperationContext context = System.ServiceModel.OperationContext.Current;

            //This is to instantiate a winform from a Console (will convert to service shortly) 
            MapThread = new System.Threading.Thread(new System.Threading.ThreadStart(delegate
            {
                using (System.ServiceModel.OperationContextScope scope = new System.ServiceModel.OperationContextScope(context))
                {
this.GeocodeAddressEvent += new GeocodeAddressEventHandler(GeocodeAddress_Raised);
                 }
            }));
            MapThread.SetApartmentState(System.Threading.ApartmentState.STA);
            MapThread.Start();
            MapThread.Join();
        }
        catch (Exception ex)
        {
            return false;
        }

        return true; 
    }

实际上,事实证明,线程在委托范围终止后终止。这可能是一种愚蠢的方法,但我在该范围内放置了 while Queue.empty { sleep },因此它永远不会终止,然后我从另一个线程启动了 LoadMap,这样它就会堵塞我的 WCF 服务,等待永无休止的队列终止。


看一眼

http://www.codeproject.com/KB/cs/Cross_thread_Events.aspx

另请参见BackgroundWorker类:http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何引发跨线程事件 的相关文章

随机推荐

  • 如何控制推送通知中按钮的功能?

    我能够向 iOS 设备发送推送通知 通知上有一个 关闭 按钮和一个 查看 按钮 当用户点击 查看 按钮时 应用程序将打开根视图控制器 该应用程序内有一个新闻部分 假设该通知是为了提醒用户有新的新闻报道可供他们查看 如果他们点击 查看 将显示
  • 每当 Android 派中的应用程序被杀死时,服务也会被杀死

    我正在通过创建 Android 应用程序来学习 Android 编程 但是每当我杀死应用程序服务时也会被杀死 我在用着JobIntentService 使该应用程序在后台运行 工作意图服务类 public class BackGroundD
  • Windows 服务中的 TCP IP 侦听器

    我正在尝试创建一个需要在后台运行并侦听传入流量的 Windows 服务 正常且常规的 TCP 侦听器 我的代码是 private TcpListener server public void startServer EventLog Wri
  • 如何使 razor 成为现有项目中的默认视图引擎

    我将 MVC 2 项目升级到 MVC 3 如何在现有项目上将默认视图引擎设置为 Razor 编辑 抱歉 我不太清楚 我希望 Razor 成为 添加视图 对话框中的默认类型 简短回答 更改 global asax 以同时使用 Webforms
  • 通讯Arduino-C++不读Arduino

    我有以下代码 QSerialPort arduPort COM5 arduPort setBaudRate QSerialPort Baud9600 arduPort setDataBits QSerialPort Data8 arduPo
  • Push_back() 导致程序在进入 main() 之前停止

    我正在为我的 STM32F3 Discovery 板使用 C 进行开发 并使用 std deque 作为队列 在尝试调试我的代码 直接在带有 ST link 的设备上或在模拟器中 后 代码最终在 main 中输入我的代码之前在断点处停止 然
  • 为什么在 Angular 中使用 $http 而不是 jquery 的 ajax?

    我不明白何时使用 Angular 而不是 jquery 来处理 ajax 请求 例如 我为什么要使用 function ItemListCtrl scope http http get example com items success f
  • Google 地图路线 - 哪个 API?

    我正在尝试获取从用户当前位置到我正在构建的应用程序中用户定义位置的路线 这看起来应该是一件相对容易的事情 但我在使用哪个 API 上遇到了困难 现在我已经成功连接到谷歌路线API但它返回的 JSON 非常奇怪 他们在各处添加了 n 以使其易
  • C 与 C++ 中的编译器将未使用的符号包含在目标文件中

    这可能是一个愚蠢的问题 但也许有人可以提供一些见解 我在头文件中定义了一些全局变量 是的 我知道这很糟糕 但这只是假设的情况 我将此头文件包含在两个源文件中 然后将它们编译为两个目标文件 代码中的任何地方都没有引用全局符号 如果源文件是 C
  • 如何在 Jest 中将数据作为上下文传递?

    我正在尝试使用 Jest 在酶测试中传递上下文 如 Airbnb 文档所示 但上下文正在返回undefined 我不确定我在这里做错了什么 App js class App extends Component componentWillMo
  • 分段错误和堆栈溢出有什么区别?

    例如 当我们调用递归函数时 连续的调用将存储在堆栈中 但是 如果无限继续下去 则会出现错误 该错误是 分段错误 如 GCC 上所示 难道不应该是 堆栈溢出 吗 那么两者之间的基本区别是什么呢 顺便说一句 解释比维基百科链接更有帮助 已经浏览
  • GamesClient 未连接。错误:“调用 connect() 并等待调用 onConnected()。”

    我正在尝试使用GamesClient使用 Google Play 游戏服务的排行榜 现在我已经有了 所以当importbutton单击后 GamesClient用于提交一些分数 如下所示 我收到一条错误消息connect and wait
  • 对于重定向到 https://login.microsoftonline.com/ 的请求,“不存在‘Access-Control-Allow-Origin’标头”

    我正在尝试使用访问代码获取响应并得到 XMLHttpRequest 无法加载 h login microsoftonline com d331431b 899c 4666 8094 e82e6bfc3964 oaut auth 2faad
  • onclick 按钮未调用函数

    我目前遇到的问题之一是无法调用onclick提交按钮的事件 document ready function function validate var contactName document getElementById contact
  • 为什么我可以将命名属性添加到数组中,就好像它是一个对象一样?

    以下两个不同的代码片段对我来说似乎是相同的 var myArray Array myArray A Athens myArray B Berlin and var myObject A Athens B Berlin 因为它们的行为相同 而
  • Linq 分组 .include("Table") 在表上返回 null

    我有一个 linq 查询 它按 QuestionGroup 的答案进行分组 我需要加载 AssessmentQuestionsReference 表 以便我可以在 WPF 应用程序中绑定到它 var groupedAnswers from
  • RegAsm 注销问题

    下面 我创建的方法用于注册 但我得到 regasm 警告 ra0000 没有类型未注册 用于注销 private static void ExecuteRegAsm string comObjectPath string typeLibra
  • 自旋锁所需的最小 X86 组件是多少

    在汇编中实现自旋锁 在这里我发布一个我想出的解决方案 这是对的吗 你知道更短的吗 lock mov ecx 0 loop xchg eax ecx cmp ecx 0 je loop release lock dec dword eax e
  • 是否可以从 Vuejs 中的 Mounted 中发出?

    我熟悉通过事件总线发送数据 这些数据工作得很好 但现在我想发送一些东西 但我没有一个事件可以将其绑定 我尝试在已安装的情况下发出它 但效果如下 mounted bus emit send test this test 当您在中添加事件处理程
  • 如何引发跨线程事件

    如何从另一个线程引发地理编码地址事件处理程序事件 System Threading Thread MapThread WinformMap map public delegate void GeocodeAddressEventHandle