C#计时器和重复代码
我正在写一个IRC机器人,它需要每隔几分钟向频道做一次广告。我尝试使用计时器,但它太乱了,我无法将它粘贴到这里,因为它无法读取,我可以将整个文件的代码发布到pastebin 每5分钟向频道发送需要循环/定时的内容:C#计时器和重复代码,c#,loops,timer,irc,C#,Loops,Timer,Irc,我正在写一个IRC机器人,它需要每隔几分钟向频道做一次广告。我尝试使用计时器,但它太乱了,我无法将它粘贴到这里,因为它无法读取,我可以将整个文件的代码发布到pastebin 每5分钟向频道发送需要循环/定时的内容: public static void ChannelAdvertise(object sender, IrcEventArgs e) { string advertiseStream = "Live right now: "; foreach (Monitor str
public static void ChannelAdvertise(object sender, IrcEventArgs e)
{
string advertiseStream = "Live right now: ";
foreach (Monitor stream in streams)
{
if (stream.streamOnline)
{
advertiseStream += (char)3 + "03" + stream.nick +
(char)15 + " - " + stream.weblink() + " ";
}
}
irc.SendMessage(SendType.Message, e.Data.Channel,
advertiseString);
}
只是那段代码需要每10分钟发送到频道。如有任何帮助/建议,将不胜感激
class Bot
{
private static System.Timers.Timer advertiseTimer;
static void Main(string[] args)
{
advertiseTimer = new System.Timers.Timer(60000);
advertiseTimer.Elapsed += new ElapsedEventHandler(advertiseTimer_Elapsed);
advertiseTimer.Start();
}
public static void ChannelAdvertise(object sender, IrcEventArgs e)
{
string advertiseStream = "Live right now :";
foreach (Monitor stream in streams)
{
if (stream.streamOnline)
{
advertiseStream += (char)3 + "03" + stream.nick + (char)15 + " - " + stream.weblink() + " ";
}
irc.SendMessage(SendType.Message, e.Data.Channel, advertiseStream);
}
}
static void advertiseTimer_Elapsed(object sender, ElapsedEventArgs e)
{
ChannelAdvertise();
}
}
您可以使用System.Windows.Threading命名空间的Dispatchermer。 你可以参考。根据您的要求设置此计时器设置的间隔,您可以在timer tick事件处理程序中编写此代码。希望这有帮助试试:
void Main()
{
System.Threading.Timer timer = new System.Threading.Timer(
Callback,
channel,
0,
10 * 60 * 1000);
}
void Callback(object state)
{
ChannelAdvertise(this, (Channel)state);
}
您应该使用@Aashish Thite建议的调度计时器 此外,您的问题是:您定义
public static void ChannelAdvertise(object sender, IrcEventArgs e)
{
}
要接收两个参数,但您尝试在没有参数的情况下调用它:
static void advertiseTimer_Elapsed(object sender, ElapsedEventArgs e)
{
ChannelAdvertise();
}
这就是您的错误消息“方法'ChannelAdvertise'的无重载接受0个参数”告诉您的
也就是说,您有两个选项:使用所需的2个参数调用它(如您所定义的),或者重新定义它,使其不接受任何参数(如您从advertiestimer\u
方法调用它)
基本上,您需要传入一个sender对象和一个IrcEventArgs参数。
所以,你可以这样称呼它:
static void advertiseTimer_Elapsed(object sender, ElapsedEventArgs e)
{
// make a new one, or get it form some collection, or whatever
IrcEventArgs args = new IrcEventArgs( /* initialize the object */ );
ChannelAdvertise(this,args);
}
或者你可以这样重新定义:
//查看您的代码,您只使用来自IrcEventArgs.Data
对象的频道
public static void ChannelAdvertise( channelobject channel )
{
}
我最近写了一篇文章,可能正是你想要的。它在c#中演示了一个通用轮询组件,该组件以指定的间隔运行,并使用后台线程执行指定的用户操作 示例用法:
IPoller poller = new UrlPoller(args[0], TimeSpan.FromSeconds(7));
IPolling pollingComponent = new Polling.Core.Polling(poller);
pollingComponent.SubscribeForPollingUpdates(PollingAction);
pollingComponent.Start();
有关代码和完整示例,请参阅:
计时器代码比您提供的代码片段与问题更相关。无论如何,问题是什么?你有什么问题?使用计时器有什么问题?您是否收到错误、锁定或什么?不,我不知道如何使用计时器每10分钟发送一次该消息/我尝试的代码片段,但我得到“方法'ChannelAdvertise'的无重载”包含0个参数。我不知道如何执行此操作,但这是我的尝试:请将代码放入问题中,而不是放入pastebin。pastebin上的代码最终将(或可能,因此无法控制它)走开。我该如何解决这个问题?因为我需要公共静态void ChannelAdvertise(对象发送者,IrcEventArgs e)。它需要IrcEventArgs e以便我可以执行以下操作:irc.SendMessage(SendType.Message,e.Data.Channel,advertiseStream);我该如何以其他方式执行它?