本文整理汇总了C#中Callback.Invoke方法的典型用法代码示例。如果您正苦于以下问题:C# Callback.Invoke方法的具体用法?C# Callback.Invoke怎么用?C# Callback.Invoke使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Callback
的用法示例。
在下文中一共展示了Callback.Invoke方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: TaskBarDelegate
//TaskBarIcon icon, Callback<Callback<Texture>> taskBarIcon)
public TaskBarDelegate(Callback<bool> function, Callback<Callback<Texture>, bool> taskBarIcon, Callback<Vector3> hover, Callback<Rect, bool> draw, Callback<Callback<string>> tooltip, string moduleName)
{
m_ModuleName = moduleName;
m_Function = function;
m_Icon = taskBarIcon;
m_Hover = hover;
m_Draw = draw;
m_Tooltip = tooltip;
m_Icon.Invoke(new Callback<Texture>(updateIcon), m_Minimized);
m_Tooltip.Invoke(new Callback<string>(updateTooltip));
}
示例2: Transmit
//.........这里部分代码省略.........
// and clamp it to 1 digit precision to avoid large float precision error (#667)
dataAmount -= frame;
dataAmount = (float)Math.Round(dataAmount, 1);
packets--;
float progress = (scienceData.dataAmount - dataAmount) / scienceData.dataAmount;
msgStatus.message = String.Format("[{0}]: Uploading Data... {1:P0}", part.partInfo.title, progress);
ScreenMessages.PostScreenMessage(msgStatus);
RTLog.Notify("[Transmitter]: Uploading Data... ({0}) - {1} Mits/sec. Packets to go: {2} - Other experiments waiting to transfer: {3}",
scienceData.title, (PacketSize / PacketInterval).ToString("0.00"), packets, scienceDataQueue.Count);
// if we've a defined callback parameter so skip to stream each packet
if (commStream != null && callback == null)
{
RTLog.Notify(
"[Transmitter]: PacketSize: {0}; Transmitted size (frame): {1}; Data left to transmit (dataAmount): {2}; Packets left (packets): {3}",
PacketSize, frame, dataAmount, packets);
// use try / catch to prevent NRE spamming in KSP code when RT is used with other mods.
try
{
commStream.StreamData(frame, vessel.protoVessel);
}
catch (NullReferenceException nre)
{
RTLog.Notify("A problem occurred during science transmission: {0}", RTLogLevel.LVL2, nre);
}
// TODO: remove this when fixed in stock
// Fix a problem in stock KSP (discovered in 1.1.3, and still here in 1.2.1)
// issue #667 ; floating point error in RnDCommsStream.StreamData method when adding to dataIn private field
// e.g scienceData.dataAmount is 10 but in the end RnDCommsStream.dataIn will be 9.999999, so the science never
// gets registered to the ResearchAndDevelopment center.
if (packets == 0) // check that we have no packet left to send.
{
// get the private field (dataIn) in RnDCommsStream. This field is subject to floating point rounding error
// We handle this problem on our side.
var dataIn = RTUtil.GetInstanceField(typeof(RnDCommsStream), commStream, "dataIn");
if (dataIn != null)
{
// check if we have a delta (e.g. 10 - 9.999999999 will give us a tiny delta)
var delta = scienceData.dataAmount - (float) dataIn;
RTLog.Notify("[Transmitter]: delta: {0}", delta);
// the delta must be positive and less than this constant to push / transmit the remaining size.
// This prevent us pushing packets with too much leftover to transmit (e.g if there was a connection loss).
if ((delta > 0f) && (delta <= PacketRemainingSize))
{
try
{
// we have a delta, try to send the remaining little bit of science
commStream.StreamData(delta, vessel.protoVessel);
}
catch (NullReferenceException nre)
{
RTLog.Notify("A problem occurred during science transmission (delta): {0}",
RTLogLevel.LVL2, nre);
}
}
}
else
{
RTLog.Notify("[Transmitter]: dataIn is null.");
}
} // end stock fix
}
else
{
RTLog.Notify("[Transmitter]: [DEBUG] commstream is null and no callback");
}
}
else
{
// not enough power
msg.message = String.Format("<b><color=orange>[{0}]: Warning! Not Enough {1}!</color></b>", part.partInfo.title, RequiredResource);
ScreenMessages.PostScreenMessage(msg);
GUIStatus = String.Format("{0}/{1} {2}", power, PacketResourceCost, RequiredResource);
}
yield return new WaitForSeconds(PacketInterval);
}
// effectively inform the game that science has been transmitted
GameEvents.OnTriggeredDataTransmission.Fire(scienceData, vessel, false);
yield return new WaitForSeconds(PacketInterval * 2);
}
isBusy = false;
msg.message = String.Format("[{0}]: Done!", part.partInfo.title);
ScreenMessages.PostScreenMessage(msg);
if (callback != null)
callback.Invoke();
GUIStatus = "Idle";
}
示例3: Delay
IEnumerator Delay(Callback callback, float delay)
{
yield return new WaitForSeconds(delay);
callback.Invoke();
}
示例4: Periodic
IEnumerator Periodic(Callback callback, float period, string name)
{
yield return new WaitForSeconds(period);
callback.Invoke();
StartPeriodicDelayOperation(callback, period, name);
}
示例5: updateTooltip
private void updateTooltip(Callback<string> tooltip)
{
tooltip.Invoke(m_Module.TaskbarTooltip());
}
示例6: updateIcon
private void updateIcon(Callback<Texture> callback, bool clicked)
{
//return your icon
callback.Invoke(m_Module.TaskbarIcon());
}
示例7: Process
/// <summary>
/// Does a callback to process the order by used in where clause.
/// </summary>
/// <param name="callback"></param>
public void Process(Callback callback)
{
foreach (Bucket.OrderByInfo info in bucket.OrderByItems)
{
callback.Invoke(info.Member, info.IsAscending);
}
}
示例8: Transmit
private IEnumerator Transmit(Callback callback = null)
{
var msg = new ScreenMessage(String.Format("[{0}]: Starting Transmission...", part.partInfo.title), 4f, ScreenMessageStyle.UPPER_LEFT);
var msgStatus = new ScreenMessage(String.Empty, 4.0f, ScreenMessageStyle.UPPER_LEFT);
ScreenMessages.PostScreenMessage(msg);
isBusy = true;
while (scienceDataQueue.Any())
{
RnDCommsStream commStream = null;
var scienceData = scienceDataQueue[0];
var dataAmount = scienceData.dataAmount;
scienceDataQueue.RemoveAt(0);
var subject = ResearchAndDevelopment.GetSubjectByID(scienceData.subjectID);
int packets = Mathf.CeilToInt(scienceData.dataAmount / PacketSize);
if (ResearchAndDevelopment.Instance != null)
{
// pre calculate the time interval - fix for x64 systems
// workaround for issue #136
float time1 = Time.time;
yield return new WaitForSeconds(PacketInterval);
// get the delta time
float x64PacketInterval = (Time.time - time1);
RTLog.Notify("Changing RnDCommsStream timeout from {0} to {1}", PacketInterval, x64PacketInterval);
commStream = new RnDCommsStream(subject, scienceData.dataAmount, x64PacketInterval,
scienceData.transmitValue, false, ResearchAndDevelopment.Instance);
}
//StartCoroutine(SetFXModules_Coroutine(modules_progress, 0.0f));
float power = 0;
while (packets > 0)
{
power += part.RequestResource("ElectricCharge", PacketResourceCost - power);
if (power >= PacketResourceCost * 0.95)
{
float frame = Math.Min(PacketSize, dataAmount);
power -= PacketResourceCost;
GUIStatus = "Uploading Data...";
dataAmount -= frame;
packets--;
float progress = (scienceData.dataAmount - dataAmount) / scienceData.dataAmount;
//StartCoroutine(SetFXModules_Coroutine(modules_progress, progress));
msgStatus.message = String.Format("[{0}]: Uploading Data... {1}", part.partInfo.title, progress.ToString("P0"));
RTLog.Notify("[Transmitter]: Uploading Data... ({0}) - {1} Mits/sec. Packets to go: {2} - Files to Go: {3}",
scienceData.title, (PacketSize / PacketInterval).ToString("0.00"), packets, scienceDataQueue.Count);
ScreenMessages.PostScreenMessage(msgStatus, true);
// if we've a defined callback parameter so skip to stream each packet
if (commStream != null && callback == null)
{
commStream.StreamData(frame, vessel.protoVessel);
}
}
else
{
msg.message = String.Format("<b><color=orange>[{0}]: Warning! Not Enough {1}!</color></b>", part.partInfo.title, RequiredResource);
ScreenMessages.PostScreenMessage(msg, true);
GUIStatus = String.Format("{0}/{1} {2}", power, PacketResourceCost, RequiredResource);
}
yield return new WaitForSeconds(PacketInterval);
}
yield return new WaitForSeconds(PacketInterval * 2);
}
isBusy = false;
msg.message = String.Format("[{0}]: Done!", part.partInfo.title);
ScreenMessages.PostScreenMessage(msg, true);
if (callback != null) callback.Invoke();
GUIStatus = "Idle";
}