C#交叉线程事件未触发

时间:2016-04-27 10:09:06

标签: c# events

我从头开始开发电报机器人,而不使用不属于我的库。我现在正在将我的库转换为基于事件的,所以我不需要对库本身的所有内容进行硬编码,而且我可以与更多的库一起工作。

到目前为止,我有:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using TelegramSharp.Core;
    using TelegramSharp.Core.Objects;
    using System.Threading;
    namespace Bot {
        class Program {
            static void Main(string[] args) {
                BotSetup CFG = ConfigManager.LoadConfig("cfg.json");
                TelegramService TS = new TelegramService(CFG);
                TS.Init();//instantiates all classes that telegramService uses.
                TS.Parser.UpdateReceived += Parser_UpdateReceived;//this stays null. ???
                Thread Telegram = new Thread(TS.Start);
                Telegram.Start();
            }

            private static void Parser_UpdateReceived(object sender, UpdateReceivedEventArgs args) {
                throw new NotImplementedException();
            }
        }
    }

问题在评论中标出,当我订阅该事件时,该事件保持为空。而且我的NotImplementedException永远不会被提出。

这是我在MessageParserClass

上声明事件的方式
    public delegate void UpdateReceivedHandler(object sender, UpdateReceivedEventArgs args);
    public event UpdateReceivedHandler UpdateReceived;
    protected virtual void OnUpdateReceived(Message message, User bot) {
        UpdateReceived?.Invoke(this, new UpdateReceivedEventArgs(message, bot));
    }

此处事件被提出

    public void ParseMessage(Message msg, TelegramService bot) {
        parsedMessagesCount++;
        if (msg.Text != null /*&& msg.Date >= ToUnixTime(DateTime.UtcNow) - 10*/) {
            OnUpdateReceived(msg, bot.BotIdentity);
            OnTextMessageReceived(msg, bot.BotIdentity);
        }
    }

这发生在我在这个项目中声明的所有事件中(所有事件都以相同的方式声明和使用)。这是因为Program类是静态的(以及订阅的方法)还是什么?我如何能够修复并成功地提升事件?

1 个答案:

答案 0 :(得分:-1)

我终于解决了这个问题。它与一个愚蠢的错误有关,here you clearly see why,basicalli我首先执行C:\\Python27\\FF_PROFILE ,实例化我需要的所有类,然后我订阅该事件,然后我使用{{1}启动我的机器人(在早期版本的库中制作),在start中我重新创建类,所以我的事件一直都是null。

非常感谢所有人都试图帮助我。