我有例3进程,其中每个进程都可以触发预定义的事件。所有这些进程都应该侦听此事件并只执行一次代码(每个新事件),重置事件并等待它再次触发。因此,对于每个事件,应该运行3个操作。进程不是由一个初始进程启动的。最好的方法是什么?
你可以使用AsyncCallback Delegate。查看一下;
https://msdn.microsoft.com/en-us/library/system.asynccallback (v = vs.110) . aspx
基本上你可以像这样在你的事件中使用:
AsyncCallback finish= new AsyncCallback(EndThis);
Delegate1 delege = new Delegate1(Function1);
delege.BeginInvoke(finish, delege);
,然后写这个方法:
void EndThis(IAsyncResult result)
{
if (result.IsCompleted)
{
Delegate1 dlg = result.AsyncState as Delegate1;
dlg.EndInvoke(result);
}
}
但我建议你使用线程,它更容易。下面是一个3个进程可以同时触发一个事件的例子。我使用button click event,但你也可以自己使用。
放3个列表视图和2个按钮,你自己试试。我希望这对你有帮助。
using System;
using System.Threading;
using System.Windows.Forms;
namespace AsyncCallbackDelegate
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
void Func1()
{
for (int i = 0; i < 377885; i++)
{
listBox1.Items.Add(i);
listBox1.SelectedIndex = listBox1.Items.Count - 1;
}
}
void Func2()
{
for (int i = 0; i < 1000000; i += 3)
{
listBox2.Items.Add(i);
listBox2.SelectedIndex = listBox2.Items.Count - 1;
}
}
void Func3()
{
for (int i = 1; i < 50000; i ++)
{
listBox3.Items.Add(i);
listBox3.SelectedIndex = listBox3.Items.Count - 1;
}
}
Thread t1;
Thread t2;
Thread t3;
private void btnStart_Click(object sender, EventArgs e)
{
ThreadStart ts1 = new ThreadStart(Func1);
ThreadStart ts2 = new ThreadStart(Func2);
ThreadStart ts3 = new ThreadStart(Func3);
t1 = new Thread(ts1);
t2 = new Thread(ts2);
t3 = new Thread(ts3);
t1.Start();
t2.Start();
t3.Start();
}
private void btnStop_Click(object sender, EventArgs e)
{
t1.Abort();
t2.Abort();
t3.Abort();
}
}
}