非块事件

新成员
加入
2020年6月23日
消息
1
编程经验
10+
你好,

我正在使用一个事件来执行方法"c_ThresholdReached"如果我按一个按钮,代码示例:
C#:
public event EventHandler ThresholdReached;

protected virtual void OnThresholdReached(EventArgs e)
{
    EventHandler handler = ThresholdReached;
    if (handler != null)
    {
        handler.Invoke(this, e);
    }
}

static void c_ThresholdReached(object sender, EventArgs e)
{
    Console.WriteLine("达到阈值。");
}

private void button_Click(object sender, EventArgs e)
{
    ThresholdReached += c_ThresholdReached;

    System.Console.WriteLine("在OnthresholdReached.");
    OnThresholdReached(EventArgs.Empty);
    System.Console.WriteLine("OnthresholdroChered.");
}
控制台系统上的输出是:
在OnthresholdReached.
达到阈值。
OnthresholdroChered.

问题是:如果可以完成方法的执行" button_Click "随后执行该方法"c_ThresholdReached"从活动中提出?
 
最后编辑了主持人:

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
Yes if OnThresholdareached() is called from another thread (e.g. a Task launched from a thread pool thread, a background worker thread, or an explicitly created thread). Otherwise, everything happens sequentially within a single thread -- there is no time travelling within a single thread even if you had a flux capacitor.
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
除此之外,我希望您意识到每次单击按钮时,请在第19行注册新的事件处理程序。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
但是,您在文本中询问的问题并不完全在您的标题中询问。正如我在第一个回复中所说的那样,您可以使用在线程池线程中运行的任务。另一种方法是在同一线程中使用任务,并利用异步/等待。但是您呼叫的任务需要实际上异步执行某些事情,否则所有工作都将在同一呼叫中同步完成。

任务不会自动启动新线程。要击除一个新的线程,你需要task.run()。
 
最佳 底部