글쎄, 내가 일을 처리했다고 생각할 때, 나는 또 다른 커브를 던진다.
이 작업을 수행하는 대신 관찰 가능한 시퀀스를 만들려고합니다 .
((Outlook.MAPIFolderEvents_12_Event)calendarFolder).BeforeItemMove +=
Calendar_BeforeItemMove;
private void Calendar_BeforeItemMove(
object item,
Outlook.MAPIFolder destFolder,
ref bool cancel){ /*...*/ }
이 Observable.FromEventPattern<TDelegate, TEventArgs> (Func<EventHandler<TEventArgs>, TDelegate>, Action<TDelegate>, Action<TDelegate>)
방법 을 사용하려고 하는데 필요한 매개 변수 때문에 거의 성공하지 못했습니다. 내가 올 수 있었던 가장 가까운 것은 :
var itemBeforeMovedObservable = Observable
.FromEvent<Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler, object>(handler =>
{
Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler bimEventHandler =
(obj, f, ref cx) => // <-- Cannot resolve symbol 'cx'; Identifier expected
{
handler(obj); // <-- shouldn't this have the other parameters as well?
};
return bimEventHandler;
},
h => ((Outlook.MAPIFolderEvents_12_Event)calendarFolder).BeforeItemMove += h,
h => ((Outlook.MAPIFolderEvents_12_Event)calendarFolder).BeforeItemMove -= h);
모든 안내에 미리 감사드립니다.
나는 이것을 테스트하는 방법에 실제로 액세스 할 수 없지만 운영자로 포장하는 것이 가장 좋을 것이라고 말할 것입니다.
//Because that naming is ridiculous
using ItemMoveEventHandler = Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler;
using ItemMoveEvent = Outlook.MAPIFolderEvents_12_Event;
//Used to wrap multiple arguments into a single object
public class MyMoveEventArgs {
public MyMoveEventArgs(Object item, MAPIFolder folder) {
this.Item = item;
this.Folder = folder;
}
public Object Item {get; private set;}
public MAPIFolder Folder {get; private set;}
}
//Create an extension method
public static IObservable<MyMoveEventArgs> BeforeMoveObservable(
this ItemMoveEvent folder,
Func<object, MAPIFolder, bool> shouldCancel) {
return Observable.FromEvent<ItemMoveEventHandler,
MoveEventArgs>
//Use the conversion overload
(emit => new ItemMoveEventHandler(
//The compiler seems to complain about cancel
//being implicit, so explicitly declare your params
(object item, MAPIFolder f, out bool cancel) =>
{
//cancel needs to be set somewhere in the body
if (!(cancel = shouldCancel(item, f)) {
emit(new MyMoveEventArgs(item, f));
}
}
},
h => folder.BeforeItemMove += h,
h => folder.BeforeItemMove -= h);
}
그런 다음 그렇게 사용할 수 있어야합니다 (예상되지 않음).
calendarFolder.BeforeMoveObservable((obj, folder => /*Return if the event should be cancelled or not*/)
.Subscribe(x => /*Only reach here if the move was successful*/);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다