C#如何在WCF应用程序的业务逻辑类中的两个方法之间实现标志消息传递系统
本文关键字:方法 两个 之间 系统 消息传递 标志 实现 WCF 应用程序 业务 | 更新日期: 2023-09-27 18:28:44
我在C#业务逻辑类中有两个方法。我需要一个标志机制,这样一个方法可以更新标志,另一个方法将在标志更新时做出反应。下面我将粘贴我的情况,这很简单:
// BusinessLogic.cs
bool photoResizingFinished = false;
public int SavePhoto() {
while (!photoResizingFinished) {
System.Threading.Thread.Sleep(100);
Trace.TraceInformation("PhotoResizingWorkerRole has not finnished yet.");
} }
public bool UpdateStatus(bool statusUpdate) {
photoResizingFinished = statusUpdate;
return true;
}
上面的两个方法位于同一个类BusinessLogic.cs.中
我唯一需要的就是能够让SavePhoto()
在CCD_ 2由CCD_ 3 更新
您可以将该类用作Web服务,并实现在ws完成工作时调用的回调函数。示例代码:
<script>
var timerID = setTimeout(CallWS, 1000)//call a js func which calls the WevService
function CallWS()
{
clearTimeout(timerID)//to stop the calling...
WSClassName.WSFuncName(param1,param2,....,callBackSuccess,callBackFailur)
///the param1,param2 are according to the parameter the function is expected to get.
}
function callBackSuccess(result,eventArgs)
{
//When the WS function finished successfuly
//**set flag to true.**
}
function callBackFailur(result,eventArgs)
{
//when error occured in the WS function
alert(result.get_message()).
}
</script>
如果你需要更多帮助,请告诉我。。。祝你好运!
您可以尝试使用.Net 4中的Task类。它允许您对任务进行排队,因此SavePhoto()代码将等待PhotoResizing()方法完成。
如果你想了解更多细节,这里有一篇关于Task命名空间的好文章:http://www.codethinked.com/net-40-and-systemthreadingtasks
using System.Threading.Tasks;
public void SavePhoto(CancellationTokenSource taskCancellationTokenSource){
// preliminary code
// start resize
Task resizeTask = Task.Factory.StartNew( ResizePhoto, taskCancellationTokenSource ) ;
// queue up final save method
Task finalTask = resizeTask.ContinueWith(t => {
if (!t.IsFaulted && !t.IsCancelled){
FinishSaving();
}
});
// Wait for everything to finish
finalTask.Wait(taskCancellationTokenSource);
}
public void ResizePhoto(){
// code
}
public void FinishSaving(){
// code
}
我会这样更改布尔:
bool _photoResizingFinished=false;
bool photoResizingFinished
{
get{return _photoResizingFinished;}
set
{
if(value) SavePhoto();
_photoResizingFinished=value;
}
}
或者,您可以在更新bool后使UpdatePhoto()调用SavePhoto(。可能是一个更好的解决方案。
也许我已经找到了使用多线程Singleton 解决问题的方法
http://msdn.microsoft.com/en-us/library/ff650316.aspx
以下是一些实现尝试:
http://forums.asp.net/t/1783765.aspx/2/10?How+to+have+two+methods+of+the+same+class+flag+to+eacher+
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/abd53523-658b-442a-bac0-1c74c1d90a90
我自己也不完全理解这其中的奥秘,但我希望它没事。