Easy methods to assign occasion handler in c builder – Easy methods to assign occasion handler in C# Builder? This information dives deep into the world of occasion dealing with, an important facet of constructing interactive C# Builder functions. We’ll discover basic ideas, totally different occasion varieties, and sensible implementation methods, guaranteeing you grasp occasion dealing with on your initiatives. From easy buttons to complicated customized occasions, this information covers all of it.
This detailed walkthrough will equip you with the data to create strong and responsive C# Builder functions. We’ll cowl every thing from fundamental occasion dealing with to superior strategies like multi-threading and error dealing with. Mastering these strategies will considerably improve your software improvement expertise.
Introduction to Occasion Dealing with in C# Builder
Salam! Occasion dealing with is a vital facet of constructing interactive C# Builder functions. It permits your software to reply dynamically to consumer actions or inner system adjustments. Think about a button click on; occasion dealing with dictates how the appliance reacts to that click on. Understanding occasions, occasion handlers, and delegates is essential to creating responsive and user-friendly functions.
Fundamentals of Occasion Dealing with
Occasion dealing with in C# Builder is centered across the idea of occasions, which sign the prevalence of an motion. Occasion handlers are the code blocks that reply to those occasions. Delegates act because the intermediaries between occasions and handlers, enabling the connection and execution of the handler code. This structured method enhances code maintainability and permits for modular design, a trademark of excellent software program engineering.
Occasions
Occasions are alerts that point out an motion has taken place throughout the software, like a button click on or a type load. They’re a mechanism to decouple totally different elements of the appliance, permitting them to work together with out direct data of one another’s inner workings. This decoupling is significant for creating extra versatile and maintainable code.
Occasion Handlers
Occasion handlers are the precise code blocks that reply to a specific occasion. They comprise the directions that the appliance ought to execute when the occasion happens. Handlers are essential for outlining the appliance’s response to consumer actions and inner occasions. By inserting handlers, the appliance will be attentive to consumer interplay and inner adjustments.
Delegates
Delegates are like tips to strategies. They act as a bridge between occasions and handlers, enabling occasions to name the suitable handler code. This connection is essential for enabling the dynamic response to occasions, permitting the appliance to be interactive. Consider delegates because the messengers carrying the occasion data to the right handler.
Instance: A Easy Button Click on, Easy methods to assign occasion handler in c builder
Let’s illustrate a easy button click on occasion. The next instance demonstrates the way to create an occasion handler for a button click on in a C# Builder software:“`C#// Occasion handler for the button clickprivate void button1Click(object sender, EventArgs e) MessageBox.Present(“Button Clicked!”);“`This code defines a way `button1Click` that can execute when the button is clicked. The `sender` object refers back to the management that generated the occasion, and `EventArgs` comprises further details about the occasion.
Typical Occasion-Dealing with Setup
A typical event-handling setup in C# Builder entails these steps:
- Declare the Occasion: Outline the occasion within the part class the place the occasion originates.
- Create the Occasion Handler: Outline the tactic that can deal with the occasion. This technique is the code that can execute in response to the occasion.
- Join the Handler: Use the suitable syntax to affiliate the occasion handler with the occasion. This step connects the occasion and the handler in order that when the occasion happens, the handler is executed.
This structured method ensures a transparent and manageable movement of execution in response to consumer actions or software adjustments. This structured method promotes higher code group and readability.
Completely different Varieties of Occasions in C# Builder

Salam kenal, and welcome to this exploration of occasion dealing with in C# Builder. Understanding the varied sorts of occasions is essential for crafting responsive and interactive functions. This part will delve into system-defined and customized occasions, illuminating their variations and offering sensible examples of the way to deal with them successfully.Occasion dealing with in C# Builder, like different programming paradigms, is a basic idea for constructing interactive functions.
It lets you react to particular actions or occurrences inside your program, enabling dynamic habits and a extra user-friendly expertise.
Widespread Varieties of Occasions
Familiarizing your self with the frequent sorts of occasions is significant for writing efficient occasion handlers. These pre-defined occasions, a part of the C# Builder framework, facilitate responsiveness to plain consumer actions and system adjustments.
Dealing with Customized Occasions
Creating your individual customized occasions empowers you to create particular reactions to distinctive circumstances inside your software. This customization permits tailor-made responses to conditions not coated by normal occasions. By defining your individual occasions, you improve the modularity and maintainability of your code.
System-Outlined vs. Consumer-Outlined Occasions
System-defined occasions are inherent elements of the C# Builder framework, routinely triggering in response to plain consumer interactions or system adjustments. These are pre-built, so that you needn’t outline them explicitly. In distinction, user-defined occasions are occasions you create particularly to reply to distinctive actions or occurrences in your software. This customization permits for tailor-made reactions to occasions not dealt with by built-in occasions.
Occasion Arguments and Utilization
Occasion arguments present the context for an occasion. They carry important information in regards to the occasion, such because the supply of the occasion, the occasion’s specifics, or the item affected. Utilizing occasion arguments accurately lets you react to the occasion’s circumstances with precision and appropriateness. They’re important for tailoring your response to the exact occasion particulars.
Desk of Occasion Sorts and Arguments
The desk under showcases frequent occasion varieties and their related arguments. This offers a transparent reference for understanding the construction of occasion dealing with in C# Builder.
Occasion Sort | Occasion Supply | Occasion Argument Sort | Description |
---|---|---|---|
Type Present | TForm | TShowMessageEventArgs | Triggered when a type is displayed. |
Button Click on | TButton | TMouseEvent | Triggered when a button is clicked. |
Timer Tick | Ttimer | TEvent | Triggered at specified intervals. |
Customized Occasion: DataUpdated | CustomComponent | TDataUpdateEventArgs | Triggered when information is up to date in a customized part. |
Implementing Occasion Handlers
Salam kenal, fellow builders! Now that we have explored the world of occasions and their varied varieties in C# Builder, let’s dive into the sensible aspect of issues: implementing occasion handlers. This important step permits our functions to reply dynamically to consumer interactions and inner system adjustments.
Attaching Occasion Handlers
To hook up an occasion handler, we primarily inform the part that triggers the occasion (like a button click on) to execute a particular piece of code when the occasion happens. That is executed by associating a way with the occasion. This technique, usually referred to as an occasion handler, comprises the directions for the way our software will react. Understanding the way to join these items is essential to constructing responsive and interactive functions.
Defining and Implementing Occasion Handlers
There are a number of methods to outline and implement occasion handlers in C# Builder, every with its personal nuances and advantages. Listed here are just a few frequent approaches:
- Utilizing Technique Names: That is probably the most simple method. We merely specify the title of an current technique that needs to be executed when the occasion happens. This method works properly for handlers which have a transparent, concise objective.
- Utilizing Lambda Expressions: Lambda expressions supply a extra concise strategy to outline brief, nameless strategies straight throughout the occasion handler project. That is notably helpful when the handler logic is straightforward and does not warrant a separate named technique. This method is a robust device for speedy prototyping and concise code.
- Utilizing Nameless Strategies: Just like lambda expressions, nameless strategies permit for outlining occasion handlers with out explicitly naming the tactic. They supply extra flexibility than lambda expressions when the handler logic is extra complicated.
Examples for Consumer Interface Controls
Let’s illustrate with examples for frequent consumer interface controls:
- Button Click on Occasion: Think about a button named ‘btnClickMe’. To execute a way referred to as ‘HandleButtonClick’ when the button is clicked, we might use code like this:
btnClickMe.Click on += HandleButtonClick;
This line attaches the HandleButtonClick technique to the Click on occasion of the button. This method is sort of simple and environment friendly for many button-related occasions. - Textual content Field Textual content Modified Occasion: When a consumer varieties in a textual content field, you’ll be able to reply to the change within the textual content. The code for this appears to be like much like button occasion dealing with:
txtMyTextBox.TextChanged += (sender, e) => // Deal with the textual content change ;
This code makes use of a lambda expression to deal with the textual content change occasion, updating the appliance’s state in actual time.
Implementing Occasion Handlers for Customized Occasions
Customized occasions are a robust device for creating modular functions. To implement occasion handlers for customized occasions, we have to outline the occasion within the class the place it originates, then use the `+=` operator to connect the handler.
- Defining a Customized Occasion: Step one is to outline a customized occasion within the class. This entails declaring an occasion of a particular sort (usually a delegate). That is the important thing to managing occasions inside our software’s parts.
- Creating Occasion Handlers: Subsequent, we create strategies that act as occasion handlers for our customized occasions. These handlers are sometimes tied to particular actions throughout the class.
- Attaching the Handler: Lastly, we use the `+=` operator to attach the occasion handler to the customized occasion. This establishes the hyperlink between the occasion set off and the handler’s response.
Comparability of Handler Implementation Strategies
The desk under compares the totally different approaches for implementing occasion handlers.
Technique | Implementation | Conciseness | Complexity |
---|---|---|---|
Technique Names | Utilizing named strategies | Reasonable | Reasonable |
Lambda Expressions | Inline technique definitions | Excessive | Low |
Nameless Strategies | Nameless technique definitions | Reasonable | Reasonable |
Occasion Dealing with with Delegates
Occasion dealing with in C# Builder, like many different programming paradigms, leverages the facility of delegates to create extra versatile and maintainable event-driven architectures. Delegates act as tips to strategies, permitting you to go strategies as arguments to different strategies. This functionality is essential in occasion dealing with as a result of it lets you dynamically connect and detach occasion handlers with out modifying the occasion supply code.
This method promotes code reusability and modularity.
Function of Delegates in Occasion Dealing with
Delegates are basic to occasion dealing with in C# Builder as a result of they act as a bridge between event-raising objects and event-handling strategies. A delegate primarily defines a contract for a way; it specifies the tactic’s signature (return sort and parameters). Through the use of delegates, you’ll be able to create occasion handlers that may be simply connected to and indifferent from occasions. This decoupling promotes unfastened coupling between parts in your software.
Creating and Utilizing Delegates
To create a delegate, you outline a delegate sort that specifies the tactic signature it could actually maintain. The delegate sort acts as a blueprint for strategies that may be assigned to it. As soon as the delegate sort is outlined, you’ll be able to create delegate situations by assigning a way to it.
Benefits of Utilizing Delegates
Utilizing delegates for occasion dealing with presents a number of key benefits:
- Flexibility: You may simply connect and detach occasion handlers with out modifying the occasion supply code. This promotes unfastened coupling, making your software extra adaptable to adjustments.
- Maintainability: Code turns into extra organized and simpler to take care of as you’ll be able to separate occasion dealing with logic from the occasion supply.
- Extensibility: New occasion handlers will be added or eliminated with out altering the occasion supply. This flexibility enhances the appliance’s adaptability to future necessities.
- Reusability: Occasion handlers will be reused throughout a number of occasions or elements of the appliance.
Instance: Implementing an Occasion Handler with a Delegate
This instance demonstrates the way to create a customized occasion and fix an occasion handler utilizing a delegate.“`C#// Outline a delegate typepublic delegate void MyEventHandler(object sender, EventArgs e);// Outline a customized eventpublic class MyEventSource public occasion MyEventHandler MyEvent; public void RaiseMyEvent() if (MyEvent != null) MyEvent(this, EventArgs.Empty); // Instance usagepublic class MyEventHandlerClass public void HandleMyEvent(object sender, EventArgs e) Console.WriteLine(“Occasion triggered!”); // Attaching the occasion handlerpublic class Instance public static void Most important(string[] args) MyEventSource supply = new MyEventSource(); MyEventHandlerClass handler = new MyEventHandlerClass(); //Connect the occasion handler supply.MyEvent += handler.HandleMyEvent; supply.RaiseMyEvent(); “`
Attaching and Detaching Occasion Handlers utilizing Delegates
The next code snippet demonstrates the way to connect and detach occasion handlers utilizing delegates:“`C#// Attaching the handlersource.MyEvent += handler.HandleMyEvent;//Detaching the handlersource.MyEvent -= handler.HandleMyEvent;“`These code snippets exhibit the class and energy of delegates in occasion dealing with. The flexibility to dynamically connect and detach handlers offers a robust and versatile strategy to handle occasions in your functions.
Dealing with A number of Occasions
Dealing with a number of occasions in C# Builder, like many different programming languages, permits a single management to reply to varied consumer interactions or inner adjustments. This flexibility enhances software responsiveness and consumer expertise. Understanding the way to handle these occasions successfully is essential for creating strong and interactive functions.
Methods for Dealing with A number of Occasions
Completely different methods exist for managing a number of occasions triggered by a single management. The method chosen relies on the precise necessities of the appliance and the character of the occasions.
Dealing with A number of Occasions with a Single Occasion Handler
Typically, a number of occasions share a standard response. Utilizing a single occasion handler for a number of occasions simplifies the code and reduces redundancy. This method is especially appropriate when the actions triggered by totally different occasions are basically comparable.
- This technique combines occasion dealing with logic for various occasions right into a single perform.
- The occasion handler wants to tell apart between the totally different occasion varieties throughout the handler itself, often by checking the occasion object.
- This method can result in extra concise code however may cut back code readability if the occasions have considerably totally different actions.
Dealing with A number of Occasions with Separate Occasion Handlers
For occasions that require distinct actions, utilizing separate occasion handlers for every occasion is usually the popular technique. This method improves code group and readability, making it simpler to take care of and debug the appliance.
- Every occasion sort has its devoted occasion handler, enhancing code group and readability.
- This technique promotes higher code maintainability as every handler is concentrated on a particular occasion sort.
- The draw back is that the code can change into extra verbose if there are a lot of occasions to deal with.
Finest Practices for Efficient Occasion Dealing with
Using well-structured and arranged occasion dealing with practices is essential for sustaining code high quality and guaranteeing clean software performance. Clear separation of considerations and applicable naming conventions considerably contribute to higher code maintainability.
- Use descriptive occasion names that clearly point out the related actions.
- Create distinct occasion handlers for every occasion sort to take care of code readability and maintainability.
- Think about the complexity of the actions related to every occasion to find out the suitable occasion dealing with technique.
Occasion Dealing with Methods Comparability
The next desk Artikels totally different methods for dealing with a number of occasions, highlighting their benefits and drawbacks:
Technique | Description | Benefits | Disadvantages |
---|---|---|---|
Single Handler | One handler for a number of occasions. | Concise code; lowered code duplication | Potential for lowered code readability if occasions are dissimilar; complicated logic inside handler. |
Separate Handlers | Particular person handlers for every occasion. | Improved code readability; higher maintainability; simpler debugging. | Extra verbose code; potential for code bloat with many occasions. |
Delegates | Utilizing delegates to deal with a number of occasions. | Supplies flexibility in combining handlers. | Doubtlessly complicated for a number of occasions with various actions. |
Occasion Aggregator Sample | Centralized occasion dealing with. | Appropriate for complicated functions with quite a few occasions. | Elevated complexity for implementing the aggregator. |
Error Dealing with and Occasion Dealing with
Sustaining the soundness and reliability of functions is essential, particularly when coping with exterior occasions. Sturdy error dealing with inside occasion handlers is crucial to stop surprising crashes and guarantee clean software habits. By anticipating and addressing potential errors, we are able to create extra resilient and user-friendly software program. This part dives into the sensible facets of integrating error dealing with into occasion handlers in C# Builder, specializing in methods to mitigate potential points and preserve software integrity.
Incorporating Error Dealing with inside Occasion Handlers
Error dealing with inside occasion handlers is a vital facet of software program improvement. Correctly applied error dealing with prevents program crashes, improves consumer expertise, and aids in debugging. It is important to anticipate potential exceptions and supply mechanisms to gracefully handle them, minimizing the danger of software failures. This entails rigorously evaluating the potential for errors throughout occasion processing and establishing applicable responses to those errors.
Significance of Dealing with Exceptions inside Occasion Handlers
Exceptions are inevitable throughout occasion processing, particularly when interacting with exterior programs or consumer enter. Ignoring these exceptions can result in software crashes, information loss, or safety vulnerabilities. By anticipating and dealing with potential exceptions inside occasion handlers, we are able to guarantee the appliance’s continued operation and preserve information integrity. This proactive method minimizes disruption and improves the appliance’s total resilience.
Widespread Error Situations and Dealing with Them Successfully
Quite a few error situations can come up throughout occasion dealing with. For instance, community points, file entry failures, invalid consumer enter, or points with exterior companies can all result in exceptions. Successfully dealing with these situations entails using strong exception dealing with strategies to establish, catch, and handle these potential issues.
Examples of Sleek Exception Dealing with throughout Occasion Processing
Think about a situation the place an occasion handler processes information from a file. If the file just isn’t discovered or is corrupted, an exception will happen. A well-designed handler ought to catch this exception, log the error, and show a user-friendly message as a substitute of crashing the appliance. This method ensures the appliance stays useful regardless of the error. One other instance entails an occasion handler that communicates with a distant server.
If the server is unavailable, an exception can be thrown. A sturdy handler ought to catch this exception, show a message indicating the server is unavailable, and permit the appliance to proceed with out halting. This instance highlights the sensible software of exception dealing with in a real-world context.
Code Snippet Demonstrating Error Dealing with inside an Occasion Handler
“`C#// Instance occasion handler with error handlingprivate void MyEventHandler(object sender, EventArgs e) strive // Code that may throw an exception string filePath = “information.txt”; string information = File.ReadAllText(filePath); // Course of the information int worth = int.Parse(information); Console.WriteLine($”Worth: worth”); catch (FileNotFoundException ex) Console.WriteLine($”Error: File not discovered – ex.Message”); // Log the error or take different motion catch (FormatException ex) Console.WriteLine($”Error: Invalid information format – ex.Message”); // Show an applicable error message to the consumer.
catch (Exception ex) Console.WriteLine($”An surprising error occurred: ex.Message”); // Log the error for debugging functions “`This code snippet demonstrates a `try-catch` block to deal with potential `FileNotFoundException` and `FormatException`. The `catch` blocks present particular error dealing with for every exception sort, stopping the appliance from crashing and offering informative error messages.
The `catch` block with `Exception` is a general-purpose handler to catch any unanticipated errors.
Occasion Dealing with Finest Practices in C# Builder
Salam kenal, fellow builders! Mastering occasion dealing with in C# Builder is essential for constructing strong and maintainable functions. This part Artikels key finest practices to make sure your occasion handlers are environment friendly, dependable, and straightforward to know. Following these pointers will result in cleaner code and a extra gratifying improvement expertise.
Writing Maintainable and Sturdy Occasion Handlers
To create maintainable and strong occasion handlers, meticulous consideration to element is crucial. A well-structured method reduces the probability of bugs and simplifies future modifications. This entails clearly defining the scope of every handler, guaranteeing its performance is remoted, and avoiding pointless complexity.
At all times try for readability and ease in your occasion handlers. Complicated logic needs to be extracted into separate strategies for higher group and maintainability.
Correct Naming Conventions for Occasions and Handlers
Constant naming conventions improve code readability and cut back confusion. Utilizing descriptive names for occasions and handlers helps convey their objective.
- Use verbs or verb phrases to explain the motion related to the occasion. As an example, “OnButtonClicked” or “OnFileLoaded”.
- Use PascalCase for each occasions and handler names to stick to C# Builder conventions. This improves code readability and reduces the possibility of errors.
- Clearly point out the item or part triggering the occasion. For instance, “Form1.OnClosing” or “Button1.OnClicked”.
Minimizing Code Duplication and Selling Code Reusability
Repeated code segments can result in upkeep complications and improve the danger of errors. Using reusable parts and capabilities can decrease code duplication and enhance maintainability.
- Determine frequent occasion dealing with duties and encapsulate them into reusable strategies or lessons.
- Extract frequent logic into separate capabilities, selling modularity and reusability. This ensures that code is constant throughout varied elements of the appliance.
- Create customized occasion arguments to deal with particular information related to occasions, lowering code duplication and enhancing the general construction.
Dealing with Occasions in a Thread-Secure Method
When coping with a number of threads, guaranteeing thread security is paramount to keep away from race situations and information corruption.
- Make use of thread-safe mechanisms to entry shared sources when occasions are triggered by totally different threads. This contains utilizing locks or synchronization primitives to stop race situations.
- Use applicable locking mechanisms (like mutexes or locks) to guard shared sources from concurrent entry when dealing with occasions.
- Think about using the `SynchronizingObject` class if it’s essential to guarantee thread security throughout occasion dealing with. It will assure constant and dependable operation, stopping unintended points.
Error Dealing with and Occasion Dealing with
Correct error dealing with is significant to make sure software stability. When implementing occasion handlers, anticipate potential points and deal with them gracefully.
- Embrace error checks and exception dealing with to handle potential errors throughout occasion dealing with. This prevents surprising software habits and helps in debugging.
- Implement applicable exception dealing with mechanisms to catch and handle potential errors. This prevents surprising crashes and facilitates debugging.
- Use logging or tracing to observe occasions and observe potential points. This helps in troubleshooting and figuring out the supply of issues.
Superior Occasion Dealing with Strategies
Mastering occasion dealing with in complicated functions usually requires extra refined strategies than fundamental occasion dealing with. These strategies are essential for constructing strong, responsive, and maintainable functions, particularly in situations involving a number of threads, asynchronous operations, and enormous occasion streams. Understanding these superior strategies empowers builders to deal with intricate conditions with precision and effectivity.
Multithreaded Occasion Dealing with
Multithreading introduces distinctive challenges to occasion dealing with. Correct synchronization mechanisms are important to stop race situations and guarantee information integrity. When occasions are dealt with throughout a number of threads, cautious consideration have to be given to string security and locking mechanisms to stop inconsistencies. Using thread-safe collections and correct synchronization primitives, like locks and mutexes, is significant for sustaining the integrity of shared information.
Asynchronous Occasion Dealing with
Asynchronous programming permits functions to carry out operations concurrently with out blocking the primary thread. In occasion dealing with, this may enhance responsiveness by permitting the appliance to proceed processing different duties whereas ready for an occasion to finish. Implementing asynchronous occasion dealing with usually entails utilizing asynchronous strategies, callbacks, or guarantees to execute occasion handlers outdoors the primary thread’s execution path.
This method is especially priceless when coping with doubtlessly time-consuming operations triggered by occasions.
Occasion Aggregators
Occasion aggregators present a centralized mechanism for managing occasions in giant functions. They decouple occasion publishers from occasion subscribers, permitting for modularity and suppleness. This method is extremely helpful in complicated functions with many interacting parts. Occasion aggregators act as a mediator, guaranteeing occasions attain the supposed subscribers with out direct coupling between parts. This promotes maintainability and reduces the affect of adjustments in a single a part of the appliance on different elements.
Implementing Occasion Aggregators
Implementing an occasion aggregator entails a number of key steps. First, outline a base class or interface for occasions, specifying the properties and information needed to explain an occasion. Then, create an occasion aggregator class accountable for publishing and subscribing to occasions. Implement strategies to publish occasions and subscribe to occasions, usually utilizing a dictionary or comparable information construction to retailer occasion subscriptions.
Crucially, take into account error dealing with within the occasion aggregator to catch and handle surprising conditions. This proactive method minimizes the danger of software crashes and ensures clean operation, even throughout surprising occasions.
Occasion Sort | Description | Instance |
---|---|---|
Occasion Information | Comprises particulars in regards to the occasion. | UserAction: userId: 123, motion: “login” |
Occasion Aggregator | Centralized occasion administration. | EventAggregator.Publish(new UserAction userId = 123, motion = “login”); |
Occasion Handler | Handles the occasion. | EventAggregator.Subscribe(e => Console.WriteLine($”Consumer e.userId logged in.”); ); |
A well-designed occasion aggregator facilitates a clear separation of considerations. This promotes maintainability and reduces the danger of introducing bugs. This method is extremely advisable for functions with quite a few parts and occasions, guaranteeing the appliance stays responsive and arranged.
Conclusion

In conclusion, mastering occasion dealing with in C# Builder is essential to constructing dynamic and user-friendly functions. We have coated the important ideas, sensible examples, and finest practices that will help you combine occasions seamlessly into your initiatives. This complete information has supplied a powerful basis on your occasion dealing with endeavors.
FAQ Overview: How To Assign Occasion Handler In C Builder
Q: What are the frequent sorts of occasions utilized in C# Builder functions?
A: Widespread occasion varieties embody button clicks, textual content field adjustments, type masses, and mouse actions. You may additionally encounter customized occasions tailor-made to your particular software logic.
Q: How do I deal with a number of occasions for a single management?
A: You may deal with a number of occasions utilizing a single occasion handler, or assign separate handlers for every occasion sort, relying in your wants. Methods for dealing with a number of occasions effectively are detailed within the information.
Q: What are delegates, and why are they essential for occasion dealing with?
A: Delegates act as tips to strategies. In occasion dealing with, they will let you go strategies as arguments, enabling versatile and reusable occasion handlers.
Q: How can I successfully deal with errors inside occasion handlers?
A: Sturdy occasion handlers ought to embody error dealing with to stop crashes. The information explains the way to gracefully handle exceptions that may come up throughout occasion processing.