我从头开始开发电报机器人,而不使用不属于我的库。我现在正在将我的库转换为基于事件的,所以我不需要对库本身的所有内容进行硬编码,而且我可以与更多的库一起工作。
到目前为止,我有:
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类是静态的(以及订阅的方法)还是什么?我如何能够修复并成功地提升事件?
答案 0 :(得分:-1)
我终于解决了这个问题。它与一个愚蠢的错误有关,here you clearly see why,basicalli我首先执行C:\\Python27\\FF_PROFILE
,实例化我需要的所有类,然后我订阅该事件,然后我使用{{1}启动我的机器人(在早期版本的库中制作),在start中我重新创建类,所以我的事件一直都是null。
非常感谢所有人都试图帮助我。